2011-06-24 77 views
1

我試圖測量一個計算結果(作爲雙精度)的精度,與已知正確結果的BigDecimal進行比較,以達到任意精度。我想確保這是正確的小數點後x位。我想這是可以做到像這樣:BigDecimal的大小順序

(正確結果的數量級) - (差的大小順序排列)> X

我無法找到一個簡單的方法來計算的量級一個BigDecimal,但。有任何想法嗎?

如果這是一種測量準確性的不好方法,我會接受其他技術。

回答

3

要檢查正確的小數位數,您只需要數量級的差異,而不是正確結果的數量級。所以,我想你需要你的double計算結果轉換爲BigDecimal,減去精確的結果,然後再轉換回double,並採取基地10

對數或者,如果你只需要檢查結果是否準確爲x小數然後就檢查差值大於0.5×10 ^( - X),或等價:

int x = 3; // number of decimal places required 
BigDecimal difference = accurateResult.subtract(new BigDecimal(approxResult)); 
BigDecimal testStat = difference.movePointRight(x).abs(); 
boolean ok = testStat.compareTo(new BigDecimal(0.5)) <= 0; 

其實這可能是不正確的退出取決於正是你的「正確的意思x小數位「以及您需要的嚴格程度。你可以說0.15001和0.24999等於小數點後1位(兩者均爲0.2),但0.19999和0.25001之間的差異即使差別較小。如果你這樣做,我認爲你只需要明確地將兩個數字四捨五入到小數點後再進行比較。

0

由於您似乎只對粗略估計感興趣:您應該比較兩個值的log_10,它告訴您您的錯誤的數量級別......您可以通過以下方式獲得BigInteger的log_10的近似值:看它的十進制表示的長度toString(10).length()