有没有纯Python实现的fractions.Fraction,支持长整型作为分子和分母?不幸的是,指数运算似乎已经编码返回了浮点数(啊!),至少应该支持使用decimal.Decimal。
如果没有,我想我可以复制库并尝试将float()出现的地方替换为来自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_是浮点数或本身是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
类一起使用足够长时间,其他浮点数也会出现在我的结果中)。