2

This math equation...

(4195835 / 3145727) * 3145727 - 4195835

is supposed to equate to 0. According to the book Software Testing (2nd Ed),

If you get anything else, you have an old Intel Pentium CPU with a floating-point division buga software bug burned into a computer chip and reproduced over and over in the manufacturing process.

Using Python 2.7, I get -1050108 in command line.

Using Node I get 0, just as I would in the calculator

Any deeper explanation for this? This was originally brought up due to a bug in the video game Disney's Lion King, 1994. I thought I would test the equation on a few things.

4

2 に答える 2

12

浮動小数点演算ではなく、整数演算を行いました。

>>> (4195835 / 3145727) * 3145727 - 4195835
-1050108
>>> (4195835. / 3145727.) * 3145727. - 4195835.
0.0

py3k またはPEP238除算を使用して、整数から必要な動作を取得できることに注意してください。

>>> from __future__ import division
>>> (4195835 / 3145727) * 3145727 - 4195835
0.0
于 2013-09-18T02:20:45.620 に答える
9

整数演算(使用しているもの)を使用すると、整数に切り捨てられ(4195835 / 3145727)ます。1.33382...1

したがって、効果的に次のようになります。

  (4195835 / 3145727) * 3145727 - 4195835
=          1          * 3145727 - 4195835
=                       3145727 - 4195835
=                           -1050108

そのため、負の数が得られます。

値の1つを浮動小数点にするだけで、浮動小数点を使用するように強制できます。

>>> (4195835. / 3145727) * 3145727 - 4195835
0.0
于 2013-09-18T02:22:44.000 に答える