auの日記

プログラミング初心者の日記。(auはハンドルネームです)

プログラミング用語の情報落ちとは

auです。

相変わらず首が痛いですが、情報落ちという用語について調べました。

情報落ちとは

情報落ちとは、絶対値が異なる数値を足した際に、小さい方の情報が無視されてしまうことです。

実際にやってみます。

>>> 0.0000001 * 10000000 
1.0

掛け算で計算するとこうなる計算を、ループを使ってやってみます。

>>> x = 0.0
>>> for _ in range(10000000):
...   x += 0.0000001
... 
>>> print(x)
0.99999999975017 

やっていることは同じようでも、結果が違っていることがわかります。

これは、コンピュータが0と1しか情報を持っていないこと、有限の桁が存在していることが関係しているようです。

対策としては、値を小さい順に並べて小さい方から順に足すということが挙げられています。

しかし、このPythonのコードだとなかなかにしんどいと思うので、小数点を無くして計算すればいいと思います。

>>> m = 0.0000001
>>> x = 0.0
>>> tmp = 0
>>> for _ in range(10000000):
...   tmp += 1
... 
>>> print(tmp)
10000000
>>> tmp * m
1.0