我需要计算一个递归的数字序列。在公式中,我需要计算B(r(,其中B(x(是具有有理系数(即分数(的多项式,r是有理数。我的代码是
def B(x):
return x**2-x+1/6
然而,当我插入r时,我得到的是一个浮点数,而不是有理数。这是意料之中的事。
我有几个这样的多项式,我的公式涉及到这些数字的加法/减法。如何将最终结果作为有理数返回?
谢谢!
如注释中所述,fractions
模块确实很有帮助。
from fractions import Fraction
def B(x):
x = Fraction(x)
return x**2-x + Fraction('1/6')
在线试用
基本上,x**2-x
没有除法,它不需要是Fraction
。因为1/6
将变成一个浮点数,所以使用Fraction('1/6')
。我也可以使用Fraction(1,6)
。具有Fraction
输入的数学将返回Fraction
。将x = Fraction(x)
置于顶部允许分数输入。
由于某些原因,每个人都建议使用fractions.Fraction
,因此我将在此处添加以下内容:
**浮动是合理的**
事实上,类numbers.Rational
为浮点的分子/分母提供了默认值。您可以使用float.as_integer_ratio()
来获得精确的分子/分母表示。
当然,原因是浮点数的精度有限,需要将所有非理性截断为理性。所以,如果这是你想要的精确计算,那么是的,使用fractions.Fraction
。