任何编程语言中的无理数表示?
有没有人知道在任何编程语言中,有没有表示无理数的类型、对象、类或者其他什么东西?
欢迎大家提出建议。
简单来说,如果我有两个无理数对象,它们都表示根号五,当我把这两个对象相乘时,我希望得到整数五,而不是一个小数,比如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 库。