我们无法以无限精度存储小数,但可能有某种表示方式,就像我们在haskell中表示无限列表一样。未来有没有解决浮点数精度问题的想法?
第一个想法来找我是通过类似于CODATA东西来表示一个十进制数,所以,对于任何给定的自然数k,我们可以计算出十进制数精确到k位。
但有一些明显的问题,想想数a = 0.333...
和b = 0.666...
,如果我们加在一起,我们得到了ans = 0.999...
(数字序列),但我们绝不能不管a + b == 1
在这种情况下告诉。
我想是,以某种方式定义十进制数,所以它支持+
,-
,*
,/
,>
,==
操作,而且不管什么+
,-
,*
,我们应用到这些/
操作十进制数字,我们得到新的十进制数字,我们可以将它们精确计算为给定任意自然数k的k个数字。
我在想:是否有任何想法可以解决这个问题?
你见过http://hackage.haskell.org/package/cyclotomic吗? – jkeuhlen
我不确定你的要求是明确的。有可能'Rational'就是你想要的;它支持所有这些操作而不会失去精度(你将无法用它们构造一个不合理的数字) – jberryman
更一般地说,你永远不能做“x == y”,因为无论你计算多少位数字都永远无法确定下一个不会有所不同。实际的解决方案似乎是有数字家族,以便程序员可以选择他们想要的。 –