2016-11-04 2 views
1

誰でも次のことが起こる理由を説明できますか?これはなぜ-0.0を印刷しますか?

print(-1 * (605 % 11))  #-> 0 
print(-1 * (0.5*1210 % 11)) #-> -0.0 
print(-1 * (0.5*1210) % 11) #-> 0.0 

特に-0.0は不可解である..

+5

-0.0を印刷しないのはなぜですか?これは、0.0を-1倍したときに得られるものです。 – Kevin

+1

浮動小数点値で整数ではないので、演算の順番、演算子の優先順位などを順に進んでいますか? – davedwards

+0

? – Olian04

答えて

6
print(-1 * (605 % 11))  #-> 0 

整数演算。ここに驚きはありません。

​​

驚くようなところがあります。 0.5*1210 % 11は浮動小数点のゼロと評価され、次に-1 * 0.0の結果はの負のゼロになります。これは浮動小数点のものです。これは、いくつかの数値アルゴリズムのエッジケースを実装しやすくするために存在します。

print(-1 * (0.5*1210) % 11) #-> 0.0 

ここでは、Pythonよりも浮動小数点に精通した人が驚くかもしれません。 -1 * (0.5*1210)-605.0と評価されますが、-605.0 % 11の場合、%の演算では、分子ではなく分母と同じ符号が返されるため、-0.0の代わりに0.0が返されます。

関連する問題