2011-06-24 2 views
1

私は、計算結果の精度(double)を、任意の精度に対する既知の正しい結果を持つBigDecimalと比較して測定しようとしています。私はそれが小数点以下x桁まで正しいことを確認したい。私はこれがそうのように行うことができます図:BigDecimalの大きさの順

(正しい結果の大きさの順) - (差の大きさの順)> X

私はトラブルの大きさのオーダーを計算するための簡単な方法を見つけることを持っていますしかしBigDecimal。何か案は?

これは精度を測定するための悪い方法であれば、私は他の手法にも慣れています。

答えて

3

正しい小数点以下の桁数を確認するには、正しい結果の大きさの順序ではなく、差の大きさの桁数を確認します。だから私は、あなたが、BigDecimalにごdouble計算結果を変換し、正確な結果を引き、その後、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()