はじめに
次のようなコードがあったとしよう。
標準出力には、何が表示されるだろうか。
1 | print (0.03 - 0.02) |
何を簡単な話を聞いているのか思うかもしれない。
答えは0.01ではなく、
1 | print (0.03 - 0.02) |
のようになる。
プログラムは(10進数の)小数を正確に表現することが難しいためである。
これはPythonに限った話ではない。
decimalモジュールの紹介
では、小数を正確に表現する手段が全くないかというと、そうでもない。
正確な表現が要求される場面では、そのためのモジュールを用いれば良い。
1 | from decimal import * |
Pythonの場合、decimalモジュールを用いれば、正確な十進浮動小数点の表現ができ、正確な算術が行える。
1 | Decimal('0.03') - Decimal('0.02') |
fractionsモジュールの紹介
有理数を正確に表現するためには、fractionsモジュールを用いれば良い。
1 | from fractions import Fraction |
先の有限小数0.01も正確に表現できる上、
1 | Fraction(1, 100) |
無限小数も正確に表現できる。
1 | Fraction('1/3') |
Decimalインスタンスにも対応している。
1 | Fraction(Decimal('0.01')) |