我们不能以无限精度存储小数,但可能有某种方式来表示它们,就像我们在 haskell 中表示无限列表一样。
我想到的第一个想法是通过类似于Codata的东西来表示一个十进制数,这样对于任何给定的自然数 k,我们都可以计算出精确到 k 位的十进制数。
但是有一个明显的问题,想想数字a = 0.333...
和b = 0.666...
,如果我们把它们加在一起,我们得到ans = 0.999...
(a sequence of numbers) ,但我们永远无法判断是否a + b == 1
在这种情况下。
我想要的是,以某种方式定义十进制数,使其支持+
, -
, *
, /
, >
,==
操作,无论我们对这些十进制数应用什么+
, -
, *
,/
操作,我们都会得到新的十进制数,我们可以计算它们给定任何自然数 k,精确到 k 位。
我想知道:有什么想法可以解决这个问题吗?