刚刚在参加 Google CodeJam 比赛时发现了一些不符合直觉的行为。
input: pow(10, 20) in [pow(10, 20) * 1.0]
output: True
(好的...)
input: pow(10, 30) in [pow(10, 30) * 1.0]
output: False
(??????????)
(所以,这个行为取决于数字的大小?!)
(这是因为大的 Python 整数在幕后表示不同吗?)
input: True == True
output: False
(ok,一切正常)
input: pow(10, 20) in [pow(10, 20) * 1.0] == pow(10, 20) in [pow(10, 20) * 1.0]
输出:错误
(更多??????)
input: pow(10, 20) in [pow(10, 20) * 1.0] and pow(10, 20) in [pow(10, 20) * 1.0]
输出:真
(我完全迷路了)
请您参考如下方法:
这是因为 float ,也因为 python 在涉及整数时处理指数结果的方式:
>>> type(pow(10,30))
<class 'int'>
pow 运算符将结果保持为整数。
现在,如果您乘以 1.0,您会强制将表示更改为 float,然后,使用 30 的指数,精度不足以与与整数相同的值。
不相关但要完整回答您的问题,== 的奇怪行为不相关:这是 operator chaining 的问题.使用一组括号不会造成伤害并可以解决您的问题:
>>> pow(10, 20) in [pow(10, 20) * 1.0] == pow(10, 20) in [pow(10, 20) * 1.0]
False
>>> (pow(10, 20) in [pow(10, 20) * 1.0]) == (pow(10, 20) in [pow(10, 20) * 1.0])
True
>>>
