python 中的分数返回大得离谱的数字
Fractions in python returning ridiculously big numbers
我有 Python 代码来解决一些递归问题,我希望它 return 一些分数。
问题是我的代码 returns 可笑的分数(这是正确的)但它们不是最小的分数,我知道这一点,因为我可以手解公式。
这是我的代码:
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 不同)。
这里有什么问题?
转换为 Fraction
对象 在您计算之前,而不是在:
之后
def t(n):
n = Fraction(n)
if n==0:
return n
else:
return 1/(4-t(n-1))
如果您在转换为 Fraction
之前进行数学运算,则数学运算将作为浮点数学运算完成,给您一个不精确的结果,然后您将其转换为不精确的 Fraction
.
如果您先进行转换,那么数学会以分数数学的形式完成,并且事情会保持精确。
我有 Python 代码来解决一些递归问题,我希望它 return 一些分数。
问题是我的代码 returns 可笑的分数(这是正确的)但它们不是最小的分数,我知道这一点,因为我可以手解公式。
这是我的代码:
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 不同)。
这里有什么问题?
转换为 Fraction
对象 在您计算之前,而不是在:
def t(n):
n = Fraction(n)
if n==0:
return n
else:
return 1/(4-t(n-1))
如果您在转换为 Fraction
之前进行数学运算,则数学运算将作为浮点数学运算完成,给您一个不精确的结果,然后您将其转换为不精确的 Fraction
.
如果您先进行转换,那么数学会以分数数学的形式完成,并且事情会保持精确。