分子と分母としてsfractions.Fraction
をサポートする純粋なPython実装はありますか?long
残念ながら、べき乗はfloat(ack !!!)を返すようにコード化されているようです。これは、少なくとも。の使用をサポートする必要がありdecimal.Decimal
ます。
float()
ない場合は、おそらくライブラリのコピーを作成して、発生したものをから適切なものに置き換えようと試みることができると思いますが、Decimal
以前に他の人によってテストされたものが望ましいです。
コード例は次のとおりです。
base = Fraction.from_decimal(Decimal(1).exp())
a = Fraction(69885L, 53L)
x = Fraction(9L, 10L)
print base**(-a*x), type(base**(-a*x))
結果として0.0 <type 'float'>
、答えは非常に小さい小数になります。
更新:今のところ、次の回避策があります(a ** bの場合、両方が分数であると仮定します。もちろん、exp_がfloatであるか、それ自体がDecimalである場合は、別の関数が必要になります):
def fracpow(base, exp_):
base = Decimal(base.numerator)/Decimal(base.denominator)
exp_ = Decimal(exp_.numerator)/Decimal(exp_.denominator)
return base**exp_
これは答え4.08569925773896097019795484811E-516を与えます。
追加の関数なしでこれを行うためのより良い方法があるかどうかはまだ興味があります(Fraction
クラスで十分に作業すれば、他のフロートが私の結果に影響を与えることがわかります)。