我们可以使用两个表示A / B且B!= 0的整数来编写一个简单的Rational Number类。
如果我们想要表示一个无理数字类(存储和计算),我首先想到的是使用浮点数,这意味着使用IEEE 754标准(二进制分数)。这是因为必须近似无理数。
除了使用二进制分数(它们是否节省内存空间)之外,还有另一种方法可以编写非理性数字类吗?
我使用Python研究了jsbeuno的解决方案:Irrational number representation in any programming language?
他仍然使用内置浮点存储。
这不是作业。
感谢您的时间。
答案 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。