为什么Excel不按照8字节IEEE 754进行取整

为什么Excel不按照8字节IEEE 754进行取整,excel,floating-point,ieee-754,Excel,Floating Point,Ieee 754,在C#中,以下表达式的计算结果为false: 有什么具体的原因吗?上面链接的文章没有提到任何可能导致这种行为的Excel自定义实现。您能告诉Excel严格按照IEEE 754进行取整吗 请注意,尽管大多数Excel问题都应该在superuser.com上提问,但这个问题涉及浮点运算,这是编程语言中的一个常见问题。从这个问题的主题来看,Excel是一种类似于C#或Java的编程语言。to明确说明了如何使用接近0的值执行非标准操作: 值达到零时的示例 1.在Excel 95或更早版本中,在新工作簿中

在C#中,以下表达式的计算结果为
false

有什么具体的原因吗?上面链接的文章没有提到任何可能导致这种行为的Excel自定义实现。您能告诉Excel严格按照IEEE 754进行取整吗

请注意,尽管大多数Excel问题都应该在superuser.com上提问,但这个问题涉及浮点运算,这是编程语言中的一个常见问题。从这个问题的主题来看,Excel是一种类似于C#或Java的编程语言。

to明确说明了如何使用接近0的值执行非标准操作:

值达到零时的示例 1.在Excel 95或更早版本中,在新工作簿中输入以下内容:A1:=1.333+1.225-1.333-1.225

2.在单元格A1上单击鼠标右键,然后单击“设置单元格格式”。在“编号”选项卡上,单击“类别”下的“科学”。将小数点设置为15位。 Excel 95不显示0,而是显示-2.22044604925031E-16

然而,Excel97引入了一种试图纠正错误的优化 对于这个问题。应该是加法还是减法运算的结果 如果值等于或非常接近零,Excel 97及更高版本将 补偿由于转换数据而引入的任何错误 与二进制之间的操作数


未指明的“试图纠正此问题的优化”确实意味着,当需要与IEEE 754严格一致时,在使用Excel进行数值计算时应谨慎。也许使用VBA(不太可能有这种“优化”?)可能是一种解决办法。

出于兴趣,Excel报告的
=((1+1+0.85)/3-0.95)
?@MarkDickinson
1.11022E-16
。本文有一个关于Excel的部分:关键引用:“Excel用户如何预测哪些函数会根据显示而不是实际值进行操作?哪些表达式在显示之前会经过修饰?用户的程序在没有意识到这些问题的情况下是无法调试的,而有意识的用户最终会调试Microsoft的虔诚欺诈行为,而不仅仅是一个出现故障的Excel程序。”adsheet.“在Excel中,
=(1+1+0.85)/3
将是
0.95000000000000
,因为它“…在一个数字中只存储15个有效数字,并将第15位后的数字更改为零”。请参阅。@AxelRichter:实际上似乎不是这样的:如果我输入
=(1+1+0.85)/3
进入单元格A1,然后
0.95
进入单元格A2,然后
=(A1-A2)
仍然给我一个显示为
1.11022E-16
的值。如果存储的值实际上是(最接近的可表示双精度)0.95,那么
=(A1-A2)
将给出零。(尽管
=(A1=A2)
确实给了我真的值。)卡汉的话就在这里。
(1 + 1 + 0.85) / 3 <= 0.95
= ((1 + 1 + 0.85) / 3 <= 0.95)