忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【Python】誤差なし!Fractionクラスで分数を正確に計算する

コンピュータが得意な小数計算には、実はわずかな「誤差」がつきものです。しかし、Pythonの fractions.Fraction クラスを使えば、分数を分数のまま、正確に計算することができます。

1. 考え方:Fraction(分数)クラスのメリット

通常の 1 / 3 などの計算は小数(0.333...)として扱われますが、Fractionを使うと「分子」と「分母」のペアとして保持されます。また、計算結果が自動的に約分(最小の分母に整理)されるのが大きな特徴です。

f1 = Fraction(1, 6) → 1/6
f2 = Fraction(3, 6) → 3/6 (1/2)

[ 計算プロセス ]
・1/6 + 3/6 = 4/6
・4/6 を約分 → 2/3

2. Pythonサンプルプログラム

fractions モジュールから Fraction をインポートします。カンマ区切りで「分子, 分母」の順に指定します。

# -*- coding: utf-8 -*-
from fractions import Fraction

def main():
    # 分数の定義(分子, 分母)
    f1 = Fraction(1, 6)
    f2 = Fraction(3, 6)

    # 加算の実行
    result = f1 + f2

    print("分数の計算を開始します。")
    print(f"{f1} + {f2} = {result}")

if __name__ == "__main__":
    main()

3. 実行結果

分数の計算を開始します。
1/6 + 1/2 = 2/3

4. ステップアップ:多彩な初期化方法

Fractionクラスは、整数のペア以外からも分数を作ることができます。

  • 文字列から生成Fraction("0.75") と書けば 3/4 に変換されます。
  • 小数から生成Fraction(0.5) と書けば 1/2 になります。
  • 属性の取得result.numerator で分子、result.denominator で分母だけを取り出せます。

5. 浮動小数点数(float)との違い

なぜ普通の割り算ではなく、わざわざFractionを使うのか比較してみましょう。

比較項目float (通常の小数)Fraction (分数)
正確さ 循環小数などで誤差が出る 常に正確(厳密)
表示形式 0.3333333333333333 1/3
用途 一般的な計算、速度重視 金融計算、数学の証明、精密な比率

6. まとめ

Pythonの Fraction は、数学的な厳密さを保ちたいプログラムで非常に重宝します。自動で約分までこなしてくれるため、複雑な分数の計算もケアレスミスなく実装できます。誤差が許されないシーンでは、floatの代わりにぜひ活用してみてください!

PR