7

私は現在BigDecimalを使用しており、小数点以下の桁数は増えていますが、私がやろうとしていることには十分ではありません。10^6桁まで到達できる必要があります。これは私の現在のコードです

BigDecimal num = new BigDecimal(103993/33102.0);
    pw.println(num.toString());

そしてそれは3.14159265301190249175533608649857342243194580078125を出力します

数値には実際にはもっと多くの小数があります:http://www.wolframalpha.com/input/? i = 103993%2F33102

4

2 に答える 2

17

これを評価するとき、あなたは精度を失っています:

103993/33102.0

二重分割として。実際には、次のとおりです。

BigDecimal num = new BigDecimal(103993/33102.0);

と同等です:

double d = 103993/33102.0;
BigDecimal num = new BigDecimal(d);

代わりに、以下を使用してください。

int scale = 100;
BigDecimal num1 = new BigDecimal(103993);
BigDecimal num2 = new BigDecimal(33102);
System.out.println(num1.divide(num2, scale, RoundingMode.HALF_UP).toString());

出力:

3.1415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737
于 2013-03-01T18:50:16.853 に答える
3

問題はあなたがあなたの番号をどのように作っているかです。は、クラスが関与する前に、103993/33102.0倍精度浮動小数点式()として評価されます。個別のオブジェクトを作成し、を使用して必要な数を取得する必要があります。doubleBigDecimalBigDecimalBigDecimal.divide

正確な結果が必要なため、開始時に両方の数値を整数として渡すと思います。

それを行った後でも、10^6桁に到達できるとは思えません。任意精度の数学の適切な実装は、その時点よりずっと前に停止するため、そのレベルに到達するには、独自の除算アルゴリズムを実装する必要がある場合があります(少なくともデフォルトでは)。

于 2013-03-01T18:47:10.527 に答える