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
データ型を使用してください:タイプは大幅に高い精度を提供し、財務計算と正確な小数表現を要求する状況に最適です。
decimal
フローティングポイント算術を理解する:decimal
フローティングポイント表現と算術のニュアンスに慣れてください。 「すべてのコンピューター科学者が浮かぶ点算術について知っておくべきこと」などのリソースは、一般的な落とし穴を避けるための貴重な洞察を提供します。
以上がなぜ私のC#フローティングポイントの比較が不正確なのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。