任何编程语言中的无理数表示?

12 投票
7 回答
5906 浏览
提问于 2025-04-16 14:16

有没有人知道在任何编程语言中,有没有表示无理数的类型、对象、类或者其他什么东西?

欢迎大家提出建议。

简单来说,如果我有两个无理数对象,它们都表示根号五,当我把这两个对象相乘时,我希望得到整数五,而不是一个小数,比如4.999999999。

具体来说,我需要这种表示方式能够合并项,而不仅仅是每次都变成整数或小数。例如,如果我想把根号五加上1,我不想得到一个近似的整数或小数,我希望得到一个对象,这个对象可以和另一个无理数对象进行加法或乘法,这样我可以在最后一刻再让它计算出结果,以尽量减少小数的近似误差。

非常感谢!

7 个回答

3

看起来之前提到的SymPy是最合适的选择。因为你可以用它做你需要的事情,而且不需要你的软件用某种特定的专有语言来编写,这种语言通常是数学产品使用的。

另一方面,如果你不想增加额外的依赖,而且你的复杂情况仅限于平方根的乘法,那么在Python中这是一件简单的事情:

class Irrational(float):
    def __new__(cls, base, radix=1):
        self = float.__new__(cls, base ** (1.0/radix))
        self.base =  base
        self.radix = radix
        return self
    def __mul__(self, other):
        if  isinstance(other, Irrational) and other.radix == self.radix:
            return Irrational(self.base * other.base, self.radix)
        return float.__mul__(self, other)

举个例子:

>>> a = Irrational(5,2)
>>> a
2.2360679774997898
>>> a * Irrational(5,2)
5.0

你可以继续深入,加入其他操作和特殊情况。但对于复杂的表达式,你很快就会发现其实还是需要用到符号数学的。

7

你可以试试 sympy,因为看起来你需要的是符号计算,而且你也愿意使用Python这个编程语言。

19

你想要的东西叫做符号数学。你可以试试一些计算机代数系统,比如 Maxima、Maple 或 Mathematica。这些工具可以帮助你处理数学问题。此外,还有一些库可以实现这个功能,比如 Python 的 SymPy 库。

撰写回答