1. はじめに
Pythonで数値計算を扱う中で、「小数だと誤差が気になる」「正確な計算がしたい」と感じたことはありませんか?
そんなときに便利なのが、Pythonの標準ライブラリfractions
モジュールのFraction
クラスです。
この記事では、
「Python|分数(有理数)の計算:fractions.Fraction」
というテーマで、分数を使った精密な計算方法について、初心者の方にもわかりやすく解説します。
fractions.Fraction
を使うと、小数の代わりに正確な分数計算ができます。- わかりやすいコード例と実行結果つきで解説するので、初学者の方にも理解しやすい構成です。
- 実務での誤差対策や教育用プログラムにも役立ちます。
2. fractions.Fractionの基本解説
2-1. Fractionとは?
Pythonのfractions
モジュールに含まれるFraction
クラスは、有理数(分数)を正確に扱うためのクラスです。
浮動小数点と異なり、計算の途中でも誤差が発生しないのが最大の特徴です。
2-2. Fractionの基本的な使い方
from fractions import Fraction
# 分子3、分母4の分数を作成
a = Fraction(3, 4)
print(a)
実行結果:
3/4
Fraction(3, 4)
と書くことで、3/4という正確な分数オブジェクトが生成されます。
2-3. 小数や文字列からFractionを作成する
# 小数から生成
b = Fraction(0.5)
print(b)
# 文字列から生成
c = Fraction("1.25")
print(c)
実行結果:
1/2
5/4
小数から変換した場合は内部で誤差が起きないよう工夫されていますが、より正確に扱いたい場合は文字列入力が推奨されます。
3. よくある使い方・応用例
3-1. 分数の四則演算
from fractions import Fraction
a = Fraction(1, 3)
b = Fraction(1, 6)
# 加算
print(a + b)
# 減算
print(a - b)
# 乗算
print(a * b)
# 除算
print(a / b)
実行結果:
1/2
1/6
1/18
2/1
すべての計算で結果が分数として正確に返されます。
3-2. 他の数値型との演算(int, float)
# intとの演算
f = Fraction(3, 5)
print(f + 1)
# floatとの演算(結果はfloatになる)
print(f + 0.1)
実行結果:
8/5
0.7
floatと混在させると精度が崩れる可能性があるため、用途に応じて注意しましょう。
3-3. 分数の約分と分母の制限
# 自動約分
f = Fraction(10, 20)
print(f)
# 近似分数(近似の制御)
g = Fraction(3.141592).limit_denominator(10)
print(g)
実行結果:
1/2
22/7
limit_denominator()
は、近似値を分数で表すときに非常に便利です。
4. 注意点・エラー対策
4-1. ゼロ除算に注意
# 分母が0
f = Fraction(1, 0)
実行結果:
ZeroDivisionError: Fraction(1, 0)
分母が0でないか事前にチェックしてから生成するようにしましょう。
4-2. 小数から生成する場合の誤差
f1 = Fraction(0.3)
f2 = Fraction("0.3")
print(f1)
print(f2)
実行結果:
5404319552844595/18014398509481984
3/10
意図した分数が必要な場合は、小数ではなく文字列で指定するのがベストです。
5. まとめ
本記事では、Pythonのfractions.Fraction
を使った分数(有理数)の計算方法について解説しました。
- 正確な計算を行いたいときにはFractionが便利
- 小数の誤差を避けたい場面に最適
- 実務や教育・試験用コードなど、幅広い場面で活用できる
浮動小数点では再現できない、高精度な計算を実現できるのがFractionの強みです。
特に誤差が許されない金融、物理シミュレーション、教材用プログラムなどでは、ぜひ活用してみてください。