0

私は基本的に非常に大きくなる数を合計しています。精度のレベルを維持したかったので float を使用していますが、100k までしか上がりません。出力例を次に示します。

 x 361 y 800 width 530 h 800 intensity 93581.52477873862
 x 362 y 800 width 530 h 800 intensity 93829.5759344697
 x 363 y 800 width 530 h 800 intensity 94079.55780857801
 x 364 y 800 width 530 h 800 intensity NaN
 x 365 y 800 width 530 h 800 intensity NaN
 x 366 y 800 width 530 h 800 intensity NaN

ダブルなどを試してみましたが、うまくいきませんでした!誰が何を使用するのが最善かについて何か考えがありますか?

ありがとう

4

4 に答える 4

2

BigDecimalを試してください。必要な精度 (小数部の桁数など) を維持します。

于 2012-10-01T21:19:57.877 に答える
2

float「10kを超える」ことができ、double常に推奨される選択肢です。数値が非常に大きくなり、すべての桁が必要な場合は、 を使用しますBigDecimal

10k を超えることができない場合は、計算に「その他の」問題があります。

于 2012-10-01T21:20:11.933 に答える
0

あなたは、自分が抱えていると思っているものとは異なる問題を抱えています。

事実 1: float は 10k をはるかに超える可能性があります。3400000000000000000000000000000000k前後。

事実 2: float 加算オーバーフローは、NaN (非数) ではなく無限大になります。

数学のどこかに誤りがあります。x 364 での計算により、合計が台無しになる算術エラーが発生しています。精度は問題ありません。

于 2012-10-01T21:29:46.437 に答える
0

フロートはこれよりもはるかに高くなる可能性があります - 例を試してください:

    float x = 1000000000000000000000000000000000000.0f; 
    System.out.println(x);
    System.out.println(x*x);

出力:

1.0E36
Infinity

だから、何か他のことが間違っています。非常に大きな数値を使用すると、Infinitynotになることに注意してくださいNaN

あなたのコードは、うっかり 0 を 0 で割っていませんか? あなたが実行している実際の計算は何ですか?

NaN の意味に関する情報については、この質問も参照してください。

于 2012-10-01T21:27:36.627 に答える