ホームページ >バックエンド開発 >C++ >正確な累算には浮動小数点加算の順序が重要ですか?

正確な累算には浮動小数点加算の順序が重要ですか?

DDD
DDDオリジナル
2024-11-01 21:22:291028ブラウズ

Does the order of floating-point addition matter for accurate accumulation?

浮動小数点の累積: 精度と順序

浮動小数点数を累算する場合、加算される順序には重要な意味がある可能性があります。

精度が向上する昇順

あなたの直感は正しいです。通常、数値を昇順に加算すると精度が向上します。単精度浮動小数点を使用したシナリオを考えてみましょう。

  • 極端なケース: 1 / (10 億) の値が 10 億個あり、さらに 1 の値が 1 つあります。

最初に 1 を加算すると、精度が失われるため合計は 1 になります。他の値を追加しても影響はありません。

最初に小さな値を追加すると、それらはいくらか蓄積されますが、特定の点を超えると精度も失われます。

負の値と不正確さ

ただし、負の数値が含まれる場合、昇順が不適切になる可能性があります。次の値を考慮してください: 1、-1、10 億分の 1。

正しい結果 (10 億分の 1) を生成する順序は 1、-1、10 億分の 1、-1、1、10 億分の 2 つだけです。残りの注文の結果は不正確です。

高度な累積手法

極端な場合には、より高度な手法が必要です:

  • 大きさ別の累計合計: 大きさに基づいて値をグループに分割し、各グループの合計を計算します。任意精度型を効果的に使用して、これらの合計を昇順で結合します。

現実世界のプログラミングとの関連性

この問題は直接関係がないように見えるかもしれませんが、実際のプログラミングでは、次のような特定のシナリオで発生する可能性があります。

  • 小さくて重要ではない値といくつかの大きな値を蓄積すると、精度が損なわれる可能性があります。
  • 重いテール (多数の値) を処理する場合個別に合計に影響を及ぼさない小さな値)、または小さな値の加算的な組み合わせによる精度の損失。

以上が正確な累算には浮動小数点加算の順序が重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。