skip to content
Site header image satoooh.org

Pythonで正確な数値処理のために分数を使う

Pythonの標準ライブラリには分数を扱える fractions モジュールがあります。これを用いることで、浮動小数点による丸め誤差の影響を回避できます。

Last Updated:

Pythonの標準ライブラリには、分数を扱える fractions というモジュールがあります。これを使うことで、浮動小数点による丸め誤差の影響を回避できます。

以下はPythonインタプリタでの実行例です。通常、数学的に等しいはずの0.1 + 0.1 + 0.1 と 0.3 が異なる値になってしまいます。これは、0.1が2進数では割り切れないため、浮動小数点の丸め誤差が生じるからです。

>>> 0.1 + 0.1 + 0.1
0.30000000000000004
>>> 0.1 + 0.1 + 0.1 == 0.3
False

このような丸め誤差を避けるために、fractions モジュールを使って分数を扱うことができます。例えば、fractions.Fraction() を使えば、以下のように期待通りの数学的に正しい式評価が可能です。

>>> from fractions import Fraction
>>> Fraction(1, 10) + Fraction(1, 10) + Fraction(1, 10)
Fraction(3, 10)
>>> Fraction(1, 10) + Fraction(1, 10) + Fraction(1, 10) == Fraction(3, 10)
True

浮動小数点による丸め誤差が怖いときは、分数を扱うことを念頭に置くとよさそう。