· python

0.01を10000回足しても100にならない

「0.01を10000回足しても100にならない」というツイートを見ました。

有名な話のようで、「数値計算の常識」という本に書かれているようです。今度読んでみたいと思います。Pythonで検証してみました。

まず、10個の「0.01」を足してみます。

Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> lst=[0.01]*10
>>> lst
[0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
>>> sum(lst)
0.09999999999999999

この段階で、既に誤差が出ているようです。次に、10000個を足してみました。

>>> lst = [0.01] * 10000
>>> sum(lst)
100.00000000001425

確かに、100にはなりませんでした。こういうものなのでしょう。

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket