这个数学方程......
(4195835 / 3145727) * 3145727 - 4195835
应该等同于0
。根据软件测试(第2版)一书,
如果你还有其他任何东西,你就拥有了一台旧的Intel Pentium CPU 浮点除法buga软件bug烧成电脑芯片 并在制造过程中反复复制。
使用Python 2.7,我在命令行中获得-1050108
。
使用Node我得到0
,就像在计算器中一样
对此更深入的解释?这最初是由于1994年迪士尼狮子王的视频游戏中的一个错误而提出来的。我想我会在一些事情上测试这个等式。
答案 0 :(得分:12)
你做了整数数学而不是浮点数学。
>>> (4195835 / 3145727) * 3145727 - 4195835
-1050108
>>> (4195835. / 3145727.) * 3145727. - 4195835.
0.0
请注意,您可以使用py3k或PEP238除法从整数中获取所需的行为。
>>> from __future__ import division
>>> (4195835 / 3145727) * 3145727 - 4195835
0.0
答案 1 :(得分:9)
使用整数数学(这是您正在使用的),(4195835 / 3145727)
会将1.33382...
向下舍入为整数1
。
所以你有效地结束了:
(4195835 / 3145727) * 3145727 - 4195835
= 1 * 3145727 - 4195835
= 3145727 - 4195835
= -1050108
这就是你得到那个负数的原因。
只需将其中一个值设为浮点值即可强制它使用浮点数:
>>> (4195835. / 3145727) * 3145727 - 4195835
0.0