ホームページ > バックエンド開発 > C++ > なぜ私のC#フローティングポイントの比較が不正確なのですか?

なぜ私のC#フローティングポイントの比較が不正確なのですか?

Mary-Kate Olsen
リリース: 2025-01-31 04:11:08
オリジナル
924 人が閲覧しました

Why Are My C# Floating-Point Comparisons Inaccurate?

c#floating-point算術における不正確さの理解

多くのプログラミングタスクでは、正確性が最も重要です。 ただし、C#のフローティングポイント数(フロートとダブル)は、固有の制限により、一見不正確な結果を生成する可能性があります。理由を探りましょう。

このC#コードスニペットを検討してください:

論理的に、
<code class="language-csharp">float f1 = 0.09f * 100f;
float f2 = 0.09f * 99.999999f;

Console.WriteLine(f1 > f2); // Outputs: False</code>
ログイン後にコピー
より大きくする必要があります。 予期しない

結果は、コンピューターに浮動小数点数がどのように保存されるかに起因しています。 f1浮動小数点数は、有限数のビットを使用して実数を近似します。 たとえば、ダブルスは、マンティッサに52ビットの精度を持っています。 問題は、0.09のような多くの10進数が有限のバイナリ表現を使用して正確に表現できないことです。 それらは近似として保存されます f2この例の乗算操作は、丸めエラーを導入します。 False

の近似値は非常に近く、差は

データ型の精度を下回り、誤った比較につながります。 改善された精度のためのソリューション:

これらの不正確さを軽減するには、これらのアプローチを考慮してください f1 f2 float

データ型を使用してください:タイプは大幅に高い精度を提供し、財務計算と正確な小数表現を要求する状況に最適です。

    epsilon比較:
  • 直接比較の代わりに、許容値(epsilon)を使用して、2つの浮動小数点数の差が許容範囲内であるかどうかを確認します。

    decimalフローティングポイント算術を理解する:decimalフローティングポイント表現と算術のニュアンスに慣れてください。 「すべてのコンピューター科学者が浮かぶ点算術について知っておくべきこと」などのリソースは、一般的な落とし穴を避けるための貴重な洞察を提供します。

  • これらの制限を理解し、適切な手法を採用することにより、浮動小数点計算を含むC#プログラムでより正確な結果を確実にすることができます。

以上がなぜ私のC#フローティングポイントの比較が不正確なのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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