计算机中的非理性数字表示

时间:2011-12-20 18:36:15

标签: numbers floating-point

我们可以使用两个表示A / B且B!= 0的整数来编写一个简单的Rational Number类。

如果我们想要表示一个无理数字类(存储和计算),我首先想到的是使用浮点数,这意味着使用IEEE 754标准(二进制分数)。这是因为必须近似无理数。

除了使用二进制分数(它们是否节省内存空间)之外,还有另一种方法可以编写非理性数字类吗?

我使用Python研究了jsbeuno的解决方案:Irrational number representation in any programming language?

他仍然使用内置浮点存储。

这不是作业

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

有了基数论证,有些理论数字比理性数字更多。 (并且IEEE754浮点数的数量是有限的,可能小于2 ^ 64)。

您可以使用除分数之外的其他内容来表示数字(例如,以对数方式)。

答案 1 :(得分:0)

jsbeuno将数字存储为基数和基数,并在使用其他无理数进行计算时使用这些数字;他只使用浮动表示来输出。

如果你想变得更加漂亮,可以将基数和基数定义为如上所述的有理数(带有两个整数),或者将它们自己设为无理数。

为了使某些东西变得非常有用,你最终会复制一个符号化的数学包。

答案 2 :(得分:0)

您始终可以使用符号数学,将项目完全按原样存储,然后将计算推迟到可以以高于某个阈值的精度执行它们。

例如,假设您对非无理数,例如2进行了两次运算,一次取平方根,然后一次平方。精度有限,您可能会得到类似以下内容的信息:

  (√2)²
= 1.414213562²
= 1.999999999

但是,存储符号数学将使您可以将√2 的结果存储为 √2,而不是近似值,然后意识到(√x)²是等效于x,消除了出错的可能性。

现在,显然涉及比简单的IEEE754更复杂的编码,但它是not impossible to achieve