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