我們無法以無限精度存儲小數,但可能有某種表示方式,就像我們在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」,因爲無論你計算多少位數字都永遠無法確定下一個不會有所不同。實際的解決方案似乎是有數字家族,以便程序員可以選擇他們想要的。 –