3

たとえば、次のコードをご覧ください。

print 2.0 == 2 #---> returns True

print 12 % 5 #---> returns 2
print ((12.0 / 5) - (12 / 5)) * 5 #---> returns 2.0

print ((12.0 / 5) - (12 / 5)) * 5 == 12 % 5 #---> returns False (What the hell happens here?)
4

2 に答える 2

11

最初の計算では正確に2.0が返されないため、次のようになります。

>>> ((12.0 / 5) - (12 / 5)) * 5
1.9999999999999996

print浮動小数点表示を有効数字 12 桁のみに制限するため、値が 2.0 に丸められます。

于 2013-07-05T16:24:07.157 に答える
0

@Bakuriu は、コメントで長い回答を得ました。

要するに、浮動小数点数の等値比較を実行するのはまったく正しくありません。常に適切なイプシロン値 (誤差範囲) を選択して、目的の整数と計算結果の差が許容誤差範囲内に収まるようにします。

あなたが設定したとしましょうeps = 1e-5(誤差±0.00001以内)

それからあなたはすることができます

print abs(((12.0 / 5) - (12 / 5)) * 5 - 12 % 5) < eps

注: <= を実行することもできますが、必要な精度によって異なります。

于 2013-07-05T16:37:09.477 に答える