[python]実数誤差を減らす工夫をする

pythonで数学を勉強していまして・・・

正直、まだまだわからないことがあるのですが、せっかくなのでoutputをしていきたいと思います。

versions
  • python 3.9.4

実数値とは何か

pythonの世界に整数値と呼ばれる値と実数値と呼ばれる値が存在します。

整数値とは、1,2,3,4・・・など普段目にする数値を指しています。

一方、実数値とは、0.1,0.2,0.3・・・などの小数点を含む値を指しています。

pythonではこの小数点を含む値を、浮動小数点数で表しています。

実数値誤差とは何か

そもそもコンピュータは、全ての情報を2進数で表現します。

そのため、0.1などの実数値も2進数で表現されるのですが、その際に無限に数値が続き、正確に2進数で表すことができません。

つまり、2進数表記と10進数表記で誤差が生まれるということです。

これを、実数値誤差と呼びます。

pythonで実数値誤差を確認してみよう

実際にコードを書いて実数値誤差を確認してみましょう。

pythonのインタープリタを起動しましょう。

>>> a = 0
>>> for i in range(10):
...     a += 0.1
... 
>>> a
0.9999999999999999

0.1を10回足すと1になるはずなのですが、2進数表記だと誤差が生まれてしまいます。

実数誤差を減らす工夫をしよう

最後になってしまいましたが、上記のpythonコードの実数誤差をなくす工夫をおみせして終わりにします。

>>> a = 0
>>> b = 0.1 * 10
>>> for i in range(10):
...     a += b
... 
>>> a = a / 10
>>> a
1.0

0.1に10をかけてから足し合わせ、最後の10で割り直す。

このように計算することで実数誤差を減らすことができます。

参考

文系プログラマーのためのPythonで学び直す高校数学