.NET 浮動小数点演算と精度の問題
C# では、ステートメント i = 10 * 0.69;
は、予想される 6.8999999999999995
ではなく、驚くべきことに 6.9
という結果になります。これは、.NET フレームワーク内の浮動小数点数表現と演算に固有の制限に起因します。
0.69 のような 10 進数値は 2 進数で完全に表現できるという誤解があります。 ただし、浮動小数点数 (double
や float
など) は 2 進法を使用しており、有限の 10 進数の桁数で 1/3 を正確に表現できないのと同様に、多くの小数部を 2 進数で正確に表現することはできません。コンパイラはコンパイル中に結果を計算して定数として保存しますが、この保存された値は真の数学的結果の近似値です。
この精度の問題に対処するために、いくつかのソリューションが存在します。
decimal
データ型を使用します。 decimal
は精度が高く、6.9
を正確に表現できます。 ただし、decimal
を使用すると、double
や float
に比べてパフォーマンスが若干低下する可能性があります。Math.Round()
のような関数や NumberFormatInfo
を使用した文字列書式設定を使用すると、結果を目的の精度レベルに丸めることができます。浮動小数点演算の制限を理解することは、堅牢で正確な数値コードを作成するために不可欠です。適切な手法を利用することで、開発者はこれらの精度制限の影響を最小限に抑え、信頼性の高い数学的演算を保証できます。
以上がC# で「i = 10 * 0.69;」の結果が 6.9 ではなく 6.8999999999999995 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。