java(加算/減算)で2つのdouble
の値を扱うときに、最大精度の損失がどの程度であるかを確立することは可能ですか?おそらく最悪のシナリオは、2つの数値を正確に表すことができず、演算が実行され、正確に表現できない値になる場合です。Java - 1回の二重加減算における精度の最大の損失
答えて
Math.ulp(double)
をご覧ください。 ulpのdouble
は、次に高い値へのデルタです。例えば、数値に加算し、一方が他方のulpより小さい場合、加算は効果がないことを知っています。 2倍を2倍にすると、結果の最大誤差を得るためにulpsを掛けることができます。
これは私が欲しかったものです – Bober02
すべての精度が失われる可能性があります。これは、例えば、結果が最大の表現可能な有限数よりも大きい場合に起こり得る。 POSITIVE_INFINITY(またはNEGATIVE_INFINITY)として格納されます。
アップデートに関しては、追加で発生する可能性があります。
double a = Double.MAX_VALUE;
System.out.println(a);
double b = a + a;
System.out.println(b);
結果:
1.7976931348623157E308
Infinity
はそれをオンラインで参照してください:一般的にideone
表現誤差の大きさは、あなたの数字の大きさを基準にしています。あなたは、たとえば、あなたの入力の実際の精度で出力以下のコードを見て可能性が
上記の編集を参照してください - 私は主に追加を意味しました... – Bober02
:
input: 0.01000000000000000020816681711721685132943093776702880859375
range: [0.0099999999999999984734433411404097569175064563751220703125 - 0.010000000000000001942890293094023945741355419158935546875]
range size: 3.4694469519536141888238489627838134765625E-18
input: 10000000000000000
range: [9999999999999998 - 10000000000000002]
range size: 4
public static void main(String[] args) {
printRange(0.01);
printRange(10000000000000000d);
}
private static void printRange(double d) {
long dBits = Double.doubleToLongBits(d);
double dNext = Double.longBitsToDouble(dBits + 1);
double dPrevious = Double.longBitsToDouble(dBits + -1);
System.out.println("input: " + new BigDecimal(d));
System.out.println("range: [" + new BigDecimal(dPrevious) + " - " + new BigDecimal(dNext) + "]");
System.out.println("range size: " + new BigDecimal(dNext - dPrevious));
}
をあなたはまだ、あなたの結果に損失を推定する必要があるだろう操作。そしてコーナーケース(Infinity、NaNなど)ではうまくいきません。
- 1. C#の倍精度精度の損失、減算の倍数を加算するときの精度の低下
- 2. 精度の損失
- 3. C#二倍から十進精度の損失
- 4. Keras:損失や精度
- 5. PythonでDecimalを掛けるときの精度の損失
- 6. ニューラルネットワーク - Softmaxのクロスエントロピー損失の減少が精度の低下に対応
- 7. Nvidia Digitsの精度と損失のプロットデータ
- 8. フロートデータ損失や精度の問題
- 9. パンダのデータフレームにおけるkmeansの損失関数の計算
- 10. 計算精度を最大限に引き出すためのDECIMAL(精度、スケール)
- 11. 損失計算におけるKerasコンポーネントの選択に
- 12. 精度計算におけるTensorflowのバグ
- 13. 1つの配列から値を加算および減算するJava
- 14. カフェ損失層、平均および精度
- 15. ニューラルネットワークの損失が減少しても精度は向上しませんか?
- 16. 大きな数の計算上の精度を失う
- 17. SciPy fmin_bfgs精度損失を扱う
- 18. TensorFlowのバイナリ分類、予想外の大きな値の損失と精度
- 19. 精度は常に1回Caffe回帰
- 20. ハスケルの最小/最大倍精度
- 21. 1回の参加で最大値とカウントを見つける
- 22. Tensorflow:損失は減少しますが、精度は安定しています
- 23. 倍精度:大きな数の乗算
- 24. 重心と精度を計算する
- 25. Tensorflow dynamic_rnnトレーニング損失が減少し、検証の損失が増加する
- 26. Caffeの同じレイヤーからの出力精度と損失
- 27. 精度解析の浮動小数点数の損失
- 28. INDArrayのJava doubleが精度を失う
- 29. Cでlongを減算すると精度が失われますか?
- 30. 小数点以下の二重の精度
精度の低下が問題になる場合は、doubleの代わりにBigDecimalを使用することをお勧めします。 –
ええ、この質問の全体的なポイントは、損失がどのくらい大きいかを見ることです。 doubleは8バイト、BigDecimalは約40、多くのデータポイントを格納する必要があります – Bober02
浮動小数点演算を多くすると、オブジェクトの代わりにプリミティブを使用することによるパフォーマンスの向上が重要になります。 – Cephalopod