Python 中的有理数
Rational numbers in Python
我需要计算一个递归的数字序列。在公式中,我需要计算 B(r),其中 B(x) 是具有有理系数(即分数)的多项式,r 是有理数。我的密码是
def B(x):
return x**2-x+1/6
但是,当我插入 r 时,我得到一个浮点数,而不是有理数。这是预期的。
我有几个这样的多项式,我的公式涉及 addition/subtraction 这些数字。我怎样才能return最终结果为有理数?
谢谢!
如评论中所述,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
的数学将 return 输入 Fraction
。将 x = Fraction(x)
放在顶部允许小数输入。
由于某些原因每个人都一直建议使用 fractions.Fraction
,因此我将其放在这里:
** 浮点数是有理数 **
事实上,class numbers.Rational
提供了默认的 numerator/denominator 浮点数。您可以使用 float.as_integer_ratio()
获得准确的 numerator/denominator 表示。
当然,原因是浮点数的精度有限,需要将所有无理数截断为有理数。因此,如果您要进行精确计算,那么是的,请使用 fractions.Fraction
.
我需要计算一个递归的数字序列。在公式中,我需要计算 B(r),其中 B(x) 是具有有理系数(即分数)的多项式,r 是有理数。我的密码是
def B(x):
return x**2-x+1/6
但是,当我插入 r 时,我得到一个浮点数,而不是有理数。这是预期的。
我有几个这样的多项式,我的公式涉及 addition/subtraction 这些数字。我怎样才能return最终结果为有理数?
谢谢!
如评论中所述,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
的数学将 return 输入 Fraction
。将 x = Fraction(x)
放在顶部允许小数输入。
由于某些原因每个人都一直建议使用 fractions.Fraction
,因此我将其放在这里:
** 浮点数是有理数 **
事实上,class numbers.Rational
提供了默认的 numerator/denominator 浮点数。您可以使用 float.as_integer_ratio()
获得准确的 numerator/denominator 表示。
当然,原因是浮点数的精度有限,需要将所有无理数截断为有理数。因此,如果您要进行精确计算,那么是的,请使用 fractions.Fraction
.