Pythonのas_integer_ratio()メソッドでfloat値を既約分数に変換する方法
このチュートリアルでは、指定した浮動小数点数(float)と同じ比率を持つ2つの整数を求めるプログラムの作成方法を解説します。Pythonには、この目的を簡単に実現できるas_integer_ratio()という便利なメソッドが用意されています。
as_integer_ratio()メソッドとは
as_integer_ratio()は、float型のオブジェクトに対して呼び出すことができる組み込みメソッドです。このメソッドは、元の浮動小数点数と完全に一致する値を持つ分数を表す、(分子, 分母) のタプルを返します。返される分数は常に既約分数(これ以上約分できない形)になります。
実行例
まず、具体的な入力と出力のイメージを見てみましょう。
入力: 1.5 出力: 3 / 2 入力: 5.3 出力: 5967269506265907 / 1125899906842624
1.5のような単純な値は「3 / 2」というきれいな分数になりますが、5.3の場合は非常に大きな数字のペアになっています。この理由については後ほど説明します。
サンプルコード
それでは、実際のコードを確認してみましょう。
例1:1.5を分数に変換する
# float値を初期化
float_value = 1.5
# as_integer_ratio()メソッドで整数のタプルを取得
integers = float_value.as_integer_ratio()
# 結果を出力
print(f'{integers[0]} / {integers[1]}')出力結果
上記のコードを実行すると、次のような結果が得られます。
3 / 2
1.5は「3 ÷ 2」で表せるため、分子が3、分母が2のタプル (3, 2) が返されています。
例2:5.3を分数に変換する
続いて、別の例を見てみましょう。
# float値を初期化
float_value = 5.3
# as_integer_ratio()メソッドで整数のタプルを取得
integers = float_value.as_integer_ratio()
# 結果を出力
print(f'{integers[0]} / {integers[1]}')出力結果
上記のコードを実行すると、次のような結果になります。
5967269506265907 / 1125899906842624
なぜ5.3は巨大な分数になるのか?
一見不思議に思えますが、これにはきちんとした理由があります。コンピュータ内部では、浮動小数点数は2進数(バイナリ)で表現されています。しかし、「5.3」のような10進小数は2進数で正確に表すことができず、ごくわずかな誤差を含んだ近似値として格納されます。
as_integer_ratio()は、その内部的な2進表現と厳密に一致する分数を返すため、5.3のような値では分母が2のべき乗(1125899906842624 = 250)となり、大きな数字のペアになるのです。これはバグではなく、浮動小数点数の仕様による正しい動作です。
補足:fractions.Fractionを使うともっと簡単
標準ライブラリのfractions.Fractionクラスを使えば、同様の変換をより直感的に行うこともできます。
from fractions import Fraction value = 1.5 fraction = Fraction(value) print(fraction) # 出力: 3/2
Fractionオブジェクトは自動的に既約分数として管理され、四則演算なども簡単に行えるため、数学的な処理を行いたい場合におすすめです。
まとめ
本記事では、Pythonのas_integer_ratio()メソッドを使って、float値を既約分数(分子と分母のタプル)に変換する方法を学びました。単純な値は短い分数に変換されますが、多くの10進小数は2進数で正確に表現できないため、大きな数字のペアが返される点には注意が必要です。このチュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説
この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ
-
【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説
本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が