Сделав несколько экспериментов, я установил следующее поведение:
два значения «равны» в соответствии с оператором равенства (=
), если они равны 15 значащих десятичных цифр (т.е. "%.14e"
в Printf жаргон)
- меньше (
<
) и меньше или равно (<=
) определяется в соответствии с этим (т.е. «Excel меньше, чем» истинно, если оно истинно IEEE арифметики, и вал ues не равны «Excel»).
, если последний оператор (в соответствии с обычным оператором старшинства) в формуле клеточной -
или +
, а величина результата составляет менее 8 ulps (единиц в последнем месте) первого аргумента, то результат будет равен нулю.
- Это поведение может быть подавлено путем обертывания всего выражения в круглых скобках (или, что то же самое, вы можете рассматривать такие скобки для скобок как оператор).
SUM
-видимому, действует таким же образом, как прикованная последовательность +
(порог, как представляется, 8 ulps второго последнего элемента накопленной суммы), но усечение не может быть подавлен с помощью оберточных скобок.
Обратите внимание, что они несовместимы, поскольку эти значения могут быть «Excel равными», но имеют отличную от нуля разницу и наоборот.
Поэтому, если вы хотите что-то ближе к IEEE арифметику в Excel:
обруча все формулы в окончательном скобках
использование (a-b)<0
вместо a<b
(и аналогично для других логических операторов)
избегать использования SUM
(это все равно не будет строгим из-за отсутствия субнормальных сигналов и подписанных нулей)
Мне это известно только по этой ссылке. https://support.microsoft.com/en-us/kb/78113 Какие сведения о некоторых проблемах несоответствия со стандартом IEEE. В нижней части этой страницы есть ссылка, которая добавляет немного больше (но не так много). –