双精度浮点值 1.4210854715202004e-14 有什么特别之处?

What's special about the double precision floating point value 1.4210854715202004e-14?

提问人:runeks 提问时间:9/15/2023 更新时间:10/30/2023 访问量:39

问:

在我的一个库中,我最近看到一个断言错误,其中预期(双精度浮点)值为零,但实际值为 。谷歌搜索这个值,我得到了几个结果,都包含这个确切的值。1.4210854715202004e-14

我知道这与双精度浮点格式的不准确性有关,但为什么我(和许多其他人)会看到这个确切的值?

精度

评论


答:

1赞 Martin Brown 10/30/2023 #1

对于使用 Excel 和其他带有十进制数字的暂存器类型工具的非数值分析师来说,这是一种回归。这个“神奇”数字表示一个阈值,在这个阈值中,双精度的下一个十进制数字将受到舍入误差的影响,而没有意义。只有添加 1 才是真正正确的!

为了保护无辜者,相当多的程序在这 15 位小数点处截断为零,并显示或替换零而不是实际的 FP 值。

在Excel中最容易说明:

 A1 :  +1.4210854715202004e-14 
 A2 :  =A1/10
 A3 :  =1+A1
 A4 :  =1+A2
 A5 :  =A3-1
 A6 :  =A4-1
 A7 :  =(A4-1) 

在最后一个表达式周围添加括号会强制其计算到完整的 FP 精度,并向您显示实际存在的内容。您需要将单元格的格式设置为数字或科学 16 位数字,以查看舍入规则的效果。