ホームページ >バックエンド開発 >C++ >C# で Double 値を比較すると False が返されることがあるのはなぜですか?

C# で Double 値を比較すると False が返されることがあるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-22 20:50:12921ブラウズ

Why Does Comparing Double Values in C# Sometimes Return False?

C# の倍精度比較を理解する

問題:

C# で double 変数を直接比較すると、予期しない結果が生じる可能性があります。たとえば、if (x == 0.1) に値 false が割り当てられている場合でも、x0.1 と評価される可能性があります。

根本原因:

この問題は、浮動小数点数 (floatdouble など) がコンピューターのメモリ内でどのように表現されるかに起因します。私たちが慣れ親しんでいる 10 進の小数表現とは異なり、2 進の小数表現が使用されます。 これは、0.1 などの多くの 10 進数値を 2 進数で正確に表現できないことを意味します。 結果の近似には、微妙な丸め誤差が生じます。

解決策:

最も効果的な解決策は、精度が最も重要な場合に decimal データ型を使用することです。 decimal は 10 進の小数表現を採用しており、0.1 などの値を正確に格納できます。

詳細:

2 進分数は、10 進数の分数と同様に、10 の累乗ではなく 2 の累乗を使用します。1/3 (0.3333...) が 10 進数で正確に表現できないのと同様、1/10 (0.1) には正確な 2 進表現がありません。 。 この固有の制限により、比較の不一致を引き起こす丸め誤差が生じます。 コンピューターは 0.1 の近似値を保存しますが、この近似値は比較で使用されるリテラルの 0.1 と正確には等しくありません。

以上がC# で Double 値を比較すると False が返されることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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