如果在Windows计算器中输入1.0000000000000000000000000000001,然后反复点击阶乘(n!)按钮,会得到一些奇怪的结果:
1.0000000000000000000000000000001 [n!]
1 [n!]
1 [n!]
1 [n!]
0.9999999999999999999999999999997 [n!]
0.9999999999999999999999999999998 [n!]
0 [n!]
1
亲自尝试 - 这很奇怪!
我的主要兴趣是为什么我们在倒数第二步得到零。 IEEE浮动的人为因素会导致这些问题吗?
答案 0 :(得分:2)
Windows计算器中的算法非常糟糕。它不符合IEEE标准,事实上,它忽略了IEEE规范的所有课程。
或者,至少,它忽略了一个重要的教训:适当的舍入真的很重要。
尝试输入此内容(在科学模式下):
这告诉我们关于Windows计算器的两件事。
40位数比双倍数字更精确,有时候这是好的,但是squareroot(4)表明如果没有正确的舍入,那么额外的精确度就会很高。可能被误导了。正确舍入基本操作(+, - ,*,/)和平方根是相对简单的。不这样做只是草率。
关于原始问题,如果你使用" -1"当计算器表示答案为1时,你会看到数字逐渐接近1,从而看到真正的价值。最后,它的可怕舍入导致它不到1。然后发生了一些不好的事情并且它达到零。我不知道坏事是什么,但鉴于其糟糕的四舍五入,某事不好发生就不足为奇了。