在参加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
(好的,一切正常)
input: pow(10, 20) in [pow(10, 20) * 1.0] == pow(10, 20) in [pow(10, 20) * 1.0]
输出:False
(更多?????)
input: pow(10, 20) in [pow(10, 20) * 1.0] and pow(10, 20) in [pow(10, 20) * 1.0]
输出:正确
(我完全迷路了)
答案 0 :(得分:5)
这是因为浮点,而且还因为涉及整数的情况下python处理幂运算结果的方式:
>>> type(pow(10,30))
<class 'int'>
pow
运算符将结果保留为整数。
现在,如果乘以1.0
,则迫使其将表示形式更改为float
,然后使用30的指数,精度不足以与整数进行比较。< / p>
无关,但要完全回答您的问题,==
的奇怪行为与之无关:这是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
>>>