Floating point 计算器中有趣的浮点错误-为什么会发生这种情况?
如果在Windows计算器中输入1.0000000000000000000000001,然后反复点击阶乘(n!)按钮,则会得到一些奇怪的结果:Floating point 计算器中有趣的浮点错误-为什么会发生这种情况?,floating-point,ieee-754,Floating Point,Ieee 754,如果在Windows计算器中输入1.0000000000000000000000001,然后反复点击阶乘(n!)按钮,则会得到一些奇怪的结果: 1.0000000000000000000000000000001 [n!] 1 [n!] 1 [n!] 1 [n!] 0.99999999999999999999
1.0000000000000000000000000000001 [n!]
1 [n!]
1 [n!]
1 [n!]
0.9999999999999999999999999999997 [n!]
0.9999999999999999999999999999998 [n!]
0 [n!]
1
你自己试一试——这很奇怪
我的主要兴趣是为什么我们在第二步到最后一步得到零。IEEE浮动的什么人工制品导致了这些问题?Windows计算器中的算法非常糟糕。它不符合IEEE标准,事实上,它忽略了IEEE规范的所有教训 或者,至少它忽略了一个重要的教训:适当的四舍五入真的很重要 尝试键入以下内容(在科学模式下):
- 四,
- 平方根(答案显示为2)
- -2(-8.16484659555142871685211180122928E-39)
至于最初的问题,如果你使用“-1”技巧来查看真实值,当计算器说答案是1时,你会看到数字逐渐接近1。最终,糟糕的四舍五入会导致它小于一。然后坏事情发生了,它降到了零。我不知道什么是不好的东西,但考虑到它的舍入不好,不好的事情发生也就不足为奇了。也许它在某种程度上使用了,来计算那些阶乘,而明显的整数值(
1
)是实际值的舍入表示。它看起来确实在试图计算Pi函数。如果按0.5
,则按±
然后按n
然后x²
,要计算此上下文中称为sqr(事实(-0.5))
,您将得到3.14159…
。但是数字0
出来还是很愚蠢的。是的,很难想象一个浮点算法不将4的平方根精确计算为2,不管精度如何。