gpt4 book ai didi

python - 比较大数时的不直观行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:43 24 4
gpt4 key购买 nike

刚刚在参加 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
>>>

关于python - 比较大数时的不直观行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com