2013-03-27 38 views
1

在算法中檢查數值精度的最佳做法是什麼? 有沒有建議的技術來解決這個問題「我們怎麼知道我們計算的結果是正確的」? 如果可能的話:C++中是否有一些數值精度增強的例子?檢查算法中的數值精度

謝謝你的任何建議!

+0

int型= 100%精度整型數的支持間隔。 float types =僅支持一小部分Rational數字。有理數的任意精度(可以選擇)是通過各種庫將它們存儲爲2個整數,有時稱爲「小數」或「小數」 – Aprillion 2013-03-27 17:59:30

+0

@deathApril - '3/2 == 1'爲** not ** 100%的精確度。這只是程序員學會期望的。不幸的是,他們通常沒有足夠的關於浮點的知識來了解對像'3.333 * 3.0'這樣的表達式期望什麼。 – 2013-03-27 18:20:16

+0

@PeteBecker'3/2 == 1' for [integer division](http://mathworld.wolfram.com/IntegerDivision.html),餘數爲1. – Aprillion 2013-03-27 18:29:19

回答

2

Math::BigFloat/Math::BigInt將有所幫助。我必須說有很多圖書館這樣做,我不知道哪個最好。也許別人有一個很好的答案給你。

一般來說,你可以寫兩次:一次無限精度,一次沒有,然後驗證兩個。這就是我用我寫的科學軟件所做的。然後,我會寫第三個更有趣的速度增強功能。這樣我可以驗證所有三個。請注意,我知道三者並不完全相同,但他們應該有足夠的重要的佐證數字。

實際上知道多少誤差難以準確獲得 - 請注意浮點數的操作順序會導致很大的差異。這確實是特定問題,但如果您知道某些數字的相對大小,則可以更改操作的順序以獲得準確性(例如,按排序順序將列表相乘)。兩個地方尋找調查,這是,