为什么打印-0.0?

时间:2016-11-04 16:54:21

标签: python floating-point

有人可以解释为什么会发生以下情况吗?

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

特别是-0.0令人费解......

1 个答案:

答案 0 :(得分:6)

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

整数算术。这里没有惊喜。

print(-1 * (0.5*1210 % 11))   #-> -0.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中,Python将%操作定义为返回与分母相同符号的结果,而不是分子,因此返回0.0而不是-0.0