c#フローティングポイント算術:なぜ精度が重要なのか
C#の浮動小数点数は、一般的に使用されますが、予期しない結果を生成できる固有の制限があります。この不正確さを示すケースを調べてみましょう このC#コードスニペットを検討してください:(0.09
<code class="language-csharp">class Program { static void Main(string[] args) { float f1 = 0.09f * 100f; float f2 = 0.09f * 99.999999f; Console.WriteLine(f1 > f2); // Surprisingly outputs "false" } }</code>
(0.09f1
99.999999999)よりも大きくなるはずであるにもかかわらず、驚くほど「False」を出力します。これは、フローティングポイント表現の固有の制限によるものです。
f2
(C#で32ビット)のようなフローティングポイントタイプの精度は限られています。 それらは、有限数の小数桁のみを正確に表すことができます(の場合は約7)。 浮動小数点数を含む計算は、丸めエラーを導入します。これは蓄積され、観察されたような矛盾につながる可能性があります。 この例では、
の計算とストレージ中の丸めエラーは、これらの蓄積されたエラーのために、float
よりもわずかに小さいと見なされるようになります。
float
浮動小数点精度とその意味を包括的に理解するために、「すべてのコンピューター科学者が浮動小数点算術について知っておくべきこと」という決定的なリソースを参照してください。
以上がC#で0.09F * 100Fが0.09F * 99.999999Fを超えないように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。