Python中的非零算术检查

时间:2013-09-18 02:19:02

标签: python math python-2.7 command-line floating-point

这个数学方程......

(4195835 / 3145727) * 3145727 - 4195835

应该等同于0。根据软件测试(第2版)一书,

  

如果你还有其他任何东西,你就拥有了一台旧的Intel Pentium CPU   浮点除法buga软件bug烧成电脑芯片   并在制造过程中反复复制。

使用Python 2.7,我在命令行中获得-1050108

使用Node我得到0,就像在计算器中一样

对此更深入的解释?这最初是由于1994年迪士尼狮子王的视频游戏中的一个错误而提出来的。我想我会在一些事情上测试这个等式。

2 个答案:

答案 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