-1
0.1 + 0.2 == 0.3 ==> False

これを python、c#、c++、F#、Visual Basic.NET、ASP.NET で試しました。

0.1 + 0.2 == 0.30000000000000004 ==> True

これは、上で言及したすべての言語に当てはまります。この非論理的な不平等はなぜ起こるのでしょうか?

4

4 に答える 4

5

Python には、これを true に評価できるようにする 10 進ライブラリがあります (また、なぜそれが false なのかについても説明します)。実際、それらはほぼ同じ正確な例を使用しています: 2/library/decimal.html

正確さは算術に引き継がれます。10 進浮動小数点では、0.1 + 0.1 + 0.1 - 0.3 は正確にゼロに等しい

また、「すべてのコンピューター科学者が浮動小数点について知っておくべきこと」という、何年も前に書かれた影響力のある記事であり、今日でも有効です

于 2013-10-17T03:06:38.417 に答える
4

これを読んでみてください: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html (すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと)

短い答えは、バイナリでは 0.1 は繰り返し分数であり、1/8 と 1/16 の間の「どこか」にあるため、0.1 (または 0.2) の「正確なビット」表現はありません。浮動小数点値を比較するときは、そのような問題を防ぐために常にイプシロン値内で行う必要があります。

于 2013-10-17T03:08:40.227 に答える
3

Python ドキュメントからこれを読んでください。それはすべての言語にほぼそのまま適用されます。

http://docs.python.org/2/tutorial/floatingpoint.html

于 2013-10-17T03:04:27.510 に答える
2

浮動小数点数を比較するには、次のパターンを使用します。

Math.Abs(NumberToCompare1 - NumberToCompare2) < 0.01

0.01 は演算の精度である Epsilon です。

于 2013-10-17T03:08:24.933 に答える