ホームページ >バックエンド開発 >C++ >C の確率計算で浮動小数点エラーが発生するのはなぜですか?

C の確率計算で浮動小数点エラーが発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-09 17:19:02982ブラウズ

Why Does My C   Probability Calculation Incur Floating Point Errors?

簡単な C の例による浮動小数点エラーの理解

プログラミングの領域では、浮動小数点変数は有限精度であるためエラーを引き起こす可能性があります。 。浮動小数点エラーとして知られるこの現象は、このような変数を含む数学的演算を実行するときに発生する可能性があります。

次の C コード スニペットを考えてみましょう。これは、10 個の独立したイベントのシーケンスで 2 回だけ成功する確率を計算しようとしています。ここで、各イベントには成功の確率 'p' があります:

double p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);

変数 'pow()' と 'choose()' は数学的な値を表します。 function.

ここで、このコードに潜在的な浮動小数点エラーが発生するかどうかを調べてみましょう。上の方程式の「k」の値が増加すると、項「pow(1-p, k)」と「choose(k, 2)」の大きさが非常に大きくなります。これらの演算はますます大きな数値に対して実行されるため、浮動小数点エラーが蓄積される可能性があります。

これを視覚化するために、方程式 'f(k)' をグラフにしてみましょう:

f(k) = pow(1-p, k) * pow(p, k) * choose(k, 2)

ここで、'X' と 'Y' は両方とも対数スケールです。

32 ビット浮動小数点表現を持つコンピューターの場合、次のようになります。 「f(k)」は、「k」のすべての値に対してゼロになります。ただし、浮動小数点誤差により、「k」値が大きくなると誤差が大幅に増加します。これは、以下に示すグラフから明らかです。

[対数スケールを使用した XY グラフのイメージ]

このグラフでは、X 軸は 'k' を表し、Y 軸は k を表します。誤差の絶対値。 「k」が増加するにつれて、誤差の累積がより顕著になります。

したがって、提供されたコード スニペットは、確かに、確率の計算における丸め誤差の累積による浮動小数点誤差の影響を受けやすくなります。

以上がC の確率計算で浮動小数点エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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