5

如果你在 Windows 计算器中输入 1.0000000000000000000000000000001,然后反复点击阶乘 (n!) 按钮,你会得到一些奇怪的结果:

1.0000000000000000000000000000001 [n!]
1                                 [n!]
1                                 [n!]
1                                 [n!]
0.9999999999999999999999999999997 [n!]
0.9999999999999999999999999999998 [n!]
0                                 [n!]
1

自己尝试一下 - 这很奇怪!

我的主要兴趣是为什么我们在倒数第二步得到零。IEEE floats 的哪些人工制品会导致这些问题?

4

1 回答 1

2

Windows 计算器中的算术是可怕的。它不符合 IEEE,事实上,它忽略了 IEEE 规范的所有教训。

或者,至少,它忽略了一个重要的教训:适当的舍入真的很重要。

尝试输入这个(在科学模式下):

  • 4
  • 平方根(答案显示为 2)
  • -2 (-8.1648465955514287168521180122928e-39)

这告诉我们关于 Windows 计算器的两件事。

  1. 它计算平方根到大约 40 位的精度。
  2. 它无法正确舍入。

40 位的精度比双精度高得多,有时这很好,但 squareroot(4) 表明,如果没有正确的舍入,额外的“精度”可能会被误导。正确舍入基本运算(+、-、*、/)和平方根相对简单。不这样做只是草率。

至于最初的问题,如果你在计算器说答案是 1 时使用“-1”技巧来查看真实值,你会看到数字逐渐接近 1。最终它是可怕的四舍五入导致它去少于一个。然后发生了一些不好的事情,它达到了零。我不知道坏事是什么,但考虑到其糟糕的四舍五入,发生坏事也就不足为奇

于 2015-02-22T02:21:12.440 回答