2016-12-19 4 views
0

任意の長さの小数点を持つ数値を計算したい(特定の数値に対して小数点以下100桁を使用すると仮定する)。 JavaでBigDecimal(または別のクラス)を使った方がはるかに高い精度を得る

//Take the square root of 2 for 100 digits in total. 
public class Main { 
    public static void main(String[] args) { 
     BigDecimal root2 = new BigDecimal(Math.pow(2, 0.5)); 
     root2 = root2.setScale(99, BigDecimal.ROUND_HALF_UP); 
     System.out.println(root2); 
    } 
} 

そして、このプログラムの出力:

1.414213562373095145474621858738828450441360473632812500000000000000000000000000000000000000000000000 

はバイトの記憶で初心者の背景を持って、私はここでの問題は、出力形式、または私はまだ届かないという事実のいずれかであると認識しますそれが期待しているメモリを使用していないので、私が探している精度です。助言がありますか?これは高い精度を得ることは可能ですか?私はMathematicaに目を向けるのではない。

説明のために:私は100桁の完全精度を得ようとしています(ゼロはここに属しません)。

+0

現在100桁です。いくら欲しいですか? –

+1

それは間違った長さではありません。 'sqrt(2)'は非合理で、そのような末尾のゼロを持つべきではありません。それは私が探している全体の番号を格納しません。 –

+0

可能な答えはhttp://stackoverflow.com/questions/13649703/square-root-of-bigdecimal-in-javaを参照してください。 – bithead61

答えて

4

ここでは、あなたがしていることが機能していない理由を説明します。

Math.pow()は、doubleを返します。だからあなたのコードは、doubleで与えられた精度を使って値を計算し、そのdoubleからBigDecimalを生成しています。大きな小数点に精度を設定するのは遅すぎます。これは、入力としてdouble型しか持たないためです。

Math.pow()をあなたの目的に使用することはできません。代わりに、任意の精度計算を行う別のライブラリを見つける必要があります。

詳細については、Java's BigDecimal.power(BigDecimal exponent): Is there a Java library that does it?

関連する問題