是否有一个纯粹的python实现fractions.Fraction
支持long
s作为分子和分母?不幸的是,指数似乎被编码为返回一个浮点数(ack !!!),这应该至少支持使用decimal.Decimal
。具有十进制精度的分数
如果没有,我想我可以制作一个库的副本,并尝试用Decimal
替换float()
出现的地方,但我宁愿以前被别人测试过的东西。
下面是一个代码示例:
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'>
如果答案应该是一个非常小的小数。
更新:我现在有以下解决方法(假设,对于** 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
类,我会发现其他花车在我的结果中工作)。
当我做分数。分数(11,17)** 2我得到分数。分数(121,289)。你得到了什么? – 2010-01-11 00:12:23
尝试类型(fractions.Fraction(11,17)** 2.1) – Noah 2010-01-11 00:15:07
IMO,你看到的行为是正确的,但不是你想要的。由于指数是一个浮点数,所以事物转换为浮点数是合理的。现在,如果指数是分数(21,10),那会更有趣...... – 2010-01-11 00:46:30