fractions --- 有理数¶
ソースコード: Lib/fractions.py
fractions モジュールは有理数計算のサポートを提供します。
Fraction インスタンスは一対の整数、他の有理数、または文字列から生成されます。
-
class
fractions.Fraction(numerator=0, denominator=1)¶ -
class
fractions.Fraction(other_fraction) -
class
fractions.Fraction(float) -
class
fractions.Fraction(decimal) -
class
fractions.Fraction(string) 最初のバージョンは numerator と denominator が
numbers.Rationalのインスタンスであることを要求し、numerator/denominatorの値を持つ新しいFractionインスタンスを返します。 denominator が0ならば、ZeroDivisionErrorを送出します。二番目のバージョンは other_fraction がnumbers.Rationalのインスタンスであることを要求し、同じ値を持つ新しいFractionインスタンスを返します。その次の二つのバージョンは、floatとdecimal.Decimalインスタンスを受け付け、それとちょうど同じ値を持つFractionインスタンスを返します。なお、二進浮動小数点数にお決まりの問題 (浮動小数点演算、その問題と制限 参照) のため、Fraction(1.1)の引数は 11/10 と正確に等しいとは言えないので、Fraction(1.1)は予期した通りのFraction(11, 10)を返し ません 。(ただし、以下のlimit_denominator()メソッドのドキュメントを参照してください。) 最後のバージョンは、文字列またはユニコードのインスタンスを渡されることを想定します。このインスタンスは、通常、次のような形式です:[sign] numerator ['/' denominator]
ここで、オプションの
signは '+' か '-' のどちらかであり、numeratorおよび (存在する場合)denominatorは十進数の数字の文字列です。さらに、floatコンストラクタで受け付けられる有限の値を表す文字列は、Fractionコンストラクタでも受け付けられます。どちらの形式でも、入力される文字列は前後に空白があって構いません。以下に、いくつかの例を示します:>>> from fractions import Fraction >>> Fraction(16, -10) Fraction(-8, 5) >>> Fraction(123) Fraction(123, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(' -3/7 ') Fraction(-3, 7) >>> Fraction('1.414213 \t\n') Fraction(1414213, 1000000) >>> Fraction('-.125') Fraction(-1, 8) >>> Fraction('7e-6') Fraction(7, 1000000) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10)
The
Fractionclass inherits from the abstract base classnumbers.Rational, and implements all of the methods and operations from that class.Fractioninstances are hashable, and should be treated as immutable. In addition,Fractionhas the following properties and methods:バージョン 3.2 で変更:
Fractionのコンストラクタがfloatおよびdecimal.Decimalインスタンスを受け付けるようになりました。バージョン 3.9 で変更: 今は
math.gcd()関数が 分子 (numerator) と 分母 (denominator) の約分で使われています。math.gcd()は常にint型の値を返します。 以前は、GCDの型は分子と分母に依存していました。-
numerator¶ 有理数を既約分数で表したときの分子。
-
denominator¶ 有理数を既約分数で表したときの分母。
-
as_integer_ratio()¶ 2 つの整数からなるタプルで、比が Fraction インスタンスと等しく、分母が正になるものを返します。
バージョン 3.8 で追加.
-
classmethod
from_float(flt)¶ Alternative constructor which only accepts instances of
floatornumbers.Integral. Beware thatFraction.from_float(0.3)is not the same value asFraction(3, 10).
-
classmethod
from_decimal(dec)¶ Alternative constructor which only accepts instances of
decimal.Decimalornumbers.Integral.注釈
Python 3.2 以降では、
decimal.Decimalインスタンスから直接Fractionインスタンスを構築できるようになりました。
-
limit_denominator(max_denominator=1000000)¶ 分母が高々 max_denominator である、
selfに最も近いFractionを見付けて返します。このメソッドは与えられた浮動小数点数の有理数近似を見つけるのに役立ちます:>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113)
あるいは float で表された有理数を元に戻すのにも使えます:
>>> from math import pi, cos >>> Fraction(cos(pi/3)) Fraction(4503599627370497, 9007199254740992) >>> Fraction(cos(pi/3)).limit_denominator() Fraction(1, 2) >>> Fraction(1.1).limit_denominator() Fraction(11, 10)
-
__floor__()¶ 最大の
int<= selfを返します。このメソッドはmath.floor()関数からでもアクセスできます:>>> from math import floor >>> floor(Fraction(355, 113)) 3
-
__ceil__()¶ 最小の
int>= selfを返します。このメソッドはmath.ceil()関数からでもアクセスできます。
-
参考
numbersモジュール数値の塔を作り上げる抽象基底クラス。