Python 中的有理数

问题描述 投票:0回答:2

我需要计算一个递归数字序列。在公式中,我需要计算 B(r),其中 B(x) 是具有有理系数(即分数)的多项式,r 是有理数。我的代码是

def B(x):
    return x**2-x+1/6

但是,当我插入 r 时,我得到一个浮点数,而不是有理数。这是预料之中的。

我有几个像这样的多项式,我的公式涉及这些数字的加法/减法。如何以有理数形式返回最终结果?

谢谢!

python fractions
2个回答
5
投票

正如评论中所述,

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)
放在顶部可以进行小数输入。


0
投票

由于每个人出于某种原因一直建议使用

fractions.Fraction
,我将把它放在这里:

** 浮动是理性的 **

事实上,

numbers.Rational
类为浮点数的分子/分母提供了默认值。您可以使用
float.as_integer_ratio()
获得精确的分子/分母表示。

当然,原因是浮点数的精度有限,需要将所有无理数截断为有理数。因此,如果您需要的是精确计算,那么是的,请选择

fractions.Fraction

© www.soinside.com 2019 - 2024. All rights reserved.