为什么打印-0.0?

Ev.*_*nis 1 python floating-point

任何人都可以解释为什么会发生以下情况?

print(-1 * (605 % 11))        #-> 0
print(-1 * (0.5*1210 % 11))   #-> -0.0
print(-1 * (0.5*1210) % 11)   #-> 0.0
Run Code Online (Sandbox Code Playgroud)

特别-0.0是莫名其妙..

use*_*ica 6

print(-1 * (605 % 11))        #-> 0
Run Code Online (Sandbox Code Playgroud)

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

print(-1 * (0.5*1210 % 11))   #-> -0.0
Run Code Online (Sandbox Code Playgroud)

这是你可能会感到惊讶的地方.0.5*1210 % 11求值为浮点零,然后-1 * 0.0得到负零,这是浮点数.它的存在是因为它使一些数值算法的边缘情况更容易实现.

print(-1 * (0.5*1210) % 11)   #-> 0.0
Run Code Online (Sandbox Code Playgroud)

这里有人比Python更熟悉浮点可能会感到惊讶.-1 * (0.5*1210)求值-605.0,然后在-605.0 % 11Python 中,将%操作定义为返回与分母相同的符号结果,而不是分子,因此返回0.0而不是-0.0.