ホームページ > バックエンド開発 > C++ > 浮動小数点計算で予期しない結果が生じるのはなぜですか?

浮動小数点計算で予期しない結果が生じるのはなぜですか?

DDD
リリース: 2024-11-29 02:22:13
オリジナル
617 人が閲覧しました

Why Do Floating-Point Calculations Produce Unexpected Results?

浮動小数点計算の精度制限への対処

浮動小数点数はコンピューティングで広く使用されていますが、固有の精度制限があります。 。このような問題の 1 つは、すべての実数を正確に表現できないため、計算中に丸め誤差が発生することです。

浮動小数点表現の問題

次のコードを考えてみましょう。特定の値に基づいて列の数を計算するには:

double mw = 4.5999999999999996; // Represented as 4.6 internally
double p = 0.2;
double g = 0.2;
int h = 1;
int columns = (int) ((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
ログイン後にコピー

望ましい結果が得られたにもかかわらず2 の場合、プログラムは誤って 1 を出力します。これは、4.6 (4.5999999999999996) の内部浮動小数点表現が計算で丸め誤差を引き起こすためです。

精度の問題への対処

この精度の問題を克服するには、浮動小数点の限界を認識する必要がありますarithmetic:

  • 厳密な等価性の回避: 特定の値との正確な等しいかどうかをチェックする代わりに、許容可能な値の範囲を使用して丸め誤差を考慮します。
  • さまざまな数値表現を検討する: 固定小数点数などの代替の数値表現を検討すると、次のことが可能になります。特定のユースケース向けのより正確な計算。
  • 浮動小数点演算を理解する: 浮動小数点演算の原理をよく理解すると、潜在的な精度の制限を理解し、それらを軽減する戦略を開発するのに役立ちます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート