Pol*_*ial 5 floating-point ieee-754
如果在Windows计算器中输入1.0000000000000000000000000000001,然后重复点击阶乘(n!)按钮,会得到一些奇怪的结果:
1.0000000000000000000000000000001 [n!]
1 [n!]
1 [n!]
1 [n!]
0.9999999999999999999999999999997 [n!]
0.9999999999999999999999999999998 [n!]
0 [n!]
1
Run Code Online (Sandbox Code Playgroud)
自己尝试一下 - 这很奇怪!
我的主要兴趣是为什么我们在倒数第二步得到零.IEEE浮动的人工制品会导致这些问题吗?
Windows 计算器中的算术很糟糕。它不符合 IEEE 标准,事实上,它忽略了 IEEE 规范的所有教训。
或者,至少,它忽略了一个重要的教训:正确的舍入确实很重要。
尝试输入以下内容(以科学模式):
这告诉我们有关 Windows 计算器的两件事。
40 位数字比双精度数要精确得多,有时这很好,但 squareroot(4) 表明,如果没有正确的舍入,额外的“精度”可能会被误导。正确舍入基本运算(+、-、*、/)和平方根相对简单。不这样做就是马虎。
至于原来的问题,如果你使用“-1”技巧来查看真实值,当计算器说答案是 1 时,你会看到这个数字逐渐接近 1。最终,可怕的舍入导致它去少于一。然后发生了一些不好的事情,它就降到了零。我不知道坏事是什么,但鉴于其四舍五入不佳,发生坏事也就不足为奇了。