-2

私は現在、Python でいくつかの作業を行っていますが、変数を割り当てるときに奇妙な動作が発生します。たとえば、ipython コンソールで "a" を 0.1 に設定します。

In [1]: a = 0.1

次に、次を印刷します。

In [2]: a
Out[2]: 0.10000000000000001

In [3]: a == 0.1
Out[3]: True

In [4]: a == 0.10000000000000001
Out[4]: True

わかりました、おそらくそれは数値の表現が有限であるためです (最後の 1 は 16 位です)。しかしその後 :

In [17]: 1 == 0.10000000000000001
Out[17]: False

これで怖がる必要がありますか?なぜなら私は !;-)

4

2 に答える 2

4

Pythonチュートリアルの浮動小数点演算:問題と制限の部分を確認してください-あなたが説明しているのは、floatデータ型に固有の奇妙さです(Python固有のものはありません)

また、repr()(文字列表現)は見栄えの良い丸めでフロートを示していることに注意してください-最初のa例は正確0.1ではありません。これは、より正確に印刷すると確認できます。

>>> a
0.1
>>> print "%.50f" % a
0.10000000000000000555111512312578270211815834045410
于 2012-05-07T11:29:46.370 に答える
1

いいえ、怖がる必要はありません。これは厳密には必須ではなく、本当にエネルギーの無駄だと思います。

現象を理解して(すでに認識している)、Decimal必要に応じて使用してください。

于 2012-05-07T11:29:13.923 に答える