0

1未満の指数に対してJavaで検出力の計算を実行しようとしています。たとえば、(2 ^ 0.333)ですが、Javaで計算すると、同じ計算を実行した場合よりも精度の低い結果が得られます。通常の計算機。

Javaで

double f = Math.pow(2.0,0.333);
System.out.println(f);

//output
//1.2596299799473993

通常の電卓で私は得た

//output
//1.2596299799473993502546921425703

精度を失うことなく、Javaで同じ結果を得るにはどうすればよいですか?

助けていただければ幸いです

4

4 に答える 4

2

Javaに組み込まれている浮動小数点演算は、精度が制限されています。組み込みBigDecimalクラスは、必要な操作(実際のべき乗、さらにはログ)を提供しません。ApfloatApfloatMathクラスを参照)やJScienceなどのサードパーティ製アプリを使用できます。どちらも指数計算を任意の精度で実行できます。

于 2012-10-25T00:30:26.867 に答える
1

プリミティブダブルだけでは、より正確な値を取得することはできません。代わりに、任意精度の浮動小数点値 を表すために使用されるBigDecimalを使用してください。

powBigDecimalを処理するにはカスタム関数が必要になることに注意してください。このSO回答に1つの実装があります。

于 2012-10-25T00:31:51.530 に答える
0

Javaコードで使用しているような倍精度浮動小数点値は、有効数字15〜17桁しか正確に表すことができません。使用しているWindows電卓アプリが内部でより高精度のデータ型を使用していない限り(ほとんどありません)、これらの数字は無意味である可能性があります。

于 2012-10-25T00:27:43.330 に答える
0

BigDecimalを使用して、精度を設定してみてください。

   BigDecimal base = new BigDecimal(2.0);

   BigDecimal exp = new BigDecimal(0.3333);

   BigDecimal resul = new BigDecimal((Math.pow(base.doubleValue(),exp.doubleValue()))).setScale(31,RoundingMode.HALF_UP);
    System.out.println("resul "+ resul);
于 2021-06-24T03:10:08.117 に答える