Excel浮点行为规范

Excel浮点行为规范,excel,floating-point,Excel,Floating Point,尽管Excel使用标准的IEEE754 binary64格式,但它在算术和比较方面并没有使用相同的规则,例如 =0.1+0.2=0.3 返回TRUE,然后返回 确切的行为是否在任何地方记录在案?本文档切题地阐述了这一点: 特别见: 然而,Excel97引入了一种试图纠正错误的优化 对于这个问题。应该是加法还是减法运算的结果 如果值等于或非常接近零,Excel 97及更高版本将 补偿由于转换数据而引入的任何错误 与二进制之间的操作数 如果他们将此“优化”应用于0.1+0.2和0.3之间的差异,

尽管Excel使用标准的IEEE754 binary64格式,但它在算术和比较方面并没有使用相同的规则,例如

=0.1+0.2=0.3
返回
TRUE
,然后返回


确切的行为是否在任何地方记录在案?

本文档切题地阐述了这一点:

特别见:

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


如果他们将此“优化”应用于
0.1+0.2
0.3
之间的差异,则明显将其转换为0,这意味着他们没有严格遵守标准。

通过一些实验,我确定了以下行为:

  • 根据相等运算符(
    =
    ),如果两个值等于15位有效十进制数字(即printf行话中的
    “%.14e”
    ),则两个值“相等”

    • 少于(
      我只知道这个链接。它详细介绍了一些与IEEE标准不一致的问题。该页面底部有一个链接,添加了一些(但不多)。