如果您在Windows计算器中输入1.0000000000000000000000000000001,然后反复按下阶乘(n!)按钮,您会得到一些奇怪的结果:
1.0000000000000000000000000000001 [n!]
1 [n!]
1 [n!]
1 [n!]
0.9999999999999999999999999999997 [n!]
0.9999999999999999999999999999998 [n!]
0 [n!]
1
自己尝试-这很奇怪!
我的主要兴趣是为什么我们在倒数第二步得到零。 IEEE float 的伪影会导致这些问题吗?
最佳答案
Windows计算器中的算术太可怕了。它不符合IEEE标准,实际上,它忽略了IEEE规范的所有类(class)。
或者,至少,它忽略了一个重要的教训:正确的舍入确实很重要。
尝试输入以下内容(以科学模式):
这告诉我们有关Windows计算器的两件事。
40位数字比 double 数字精度更高,有时这是很好的,但是squareroot(4)表明,如果没有正确的舍入,可能会误导额外的“精度”。正确舍入基本运算(+,-,*,/)和平方根相对容易。不这样做只是草率。
对于原始问题,如果您在计算器说答案为1时使用“-1”技巧查看真实值,则您会看到该数字逐渐接近1。最终,由于四舍五入而导致其舍去少于一个。然后发生了一些不好的事情,它达到了零。我不知道什么是不好的东西,但是由于四舍五入的结果很糟糕,因此发生不好的事情也就不足为奇了。
关于floating-point - 计算器中有趣的 float 错误-为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14460337/