是否有fractions.Fraction
支持long
s 作为分子和分母的纯 python 实现?不幸的是,幂运算似乎被编码为返回一个浮点数(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_ 是浮点数或本身是小数时,我需要另一个函数):
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
类足够多,我会发现其他浮点数进入我的结果)。