Python 比较大数字时的非直观行为

Python 比较大数字时的非直观行为,python,boolean,floating-accuracy,largenumber,Python,Boolean,Floating Accuracy,Largenumber,刚发现一些在Google CodeJam中竞争时的非直觉行为 input: pow(10, 20) in [pow(10, 20) * 1.0] output: True 好的 什么 那么这个行为取决于数字的大小 这是因为大型Python整数在幕后的表示方式不同吗 input: True == True output: False 好的,一切正常 input: pow(10, 20) in [pow(10, 20) * 1.0] == pow(10, 20) in [pow(10, 20

刚发现一些在Google CodeJam中竞争时的非直觉行为

input: pow(10, 20) in [pow(10, 20) * 1.0]

output: True
好的

什么

那么这个行为取决于数字的大小

这是因为大型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]
输出:真


我完全迷失了

这是因为浮点运算,也因为python在涉及整数时处理求幂结果的方式:

>>> type(pow(10,30))
<class 'int'>

这是因为浮点运算,也因为python在涉及整数时处理求幂结果的方式:

>>> type(pow(10,30))
<class 'int'>
试试int1e+30,你也会感到惊讶。试试int1e+30,你也会感到惊讶。
>>> 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
>>>