python中的分数返回了可笑的大数字

时间:2017-02-03 03:44:30

标签: python division fractions

我有Python代码来解决一些递归,我想让它返回一些分数。

问题是我的代码返回荒谬的分数(这是正确的),但它们不是可能的最小分数,我知道它,因为我可以手动解决公式。

这是我的代码:

from __future__ import division
import sys
from fractions import Fraction
def t(n):
    if n==0:
        return 0
    else:
        return 1/(4-t(n-1))

print(Fraction(t(int(sys.argv[1]))))

如果您使用python fraction.py 2运行此代码,那么您应该有4/15,但这是我得到的:

4803839602528529/18014398509481984

这在数值上是正确的我认为,当我计算它时我得到0.26666666666666666(可能两个分数在x位数与0不同)。

这里有什么问题?

1 个答案:

答案 0 :(得分:6)

在进行数学运算之前转换为Fraction个对象,而不是之后:

def t(n):
    n = Fraction(n)
    if n==0:
        return n
    else:
        return 1/(4-t(n-1))

如果在转换为Fraction之前进行数学计算,则数学将作为浮点数学运算完成,从而为您提供不精确的结果,然后转换为不精确的Fraction

如果你先转换,那么数学就会以分数数学的方式完成,并且事情保持精确。