2 回答

TA贡献1874条经验 获得超12个赞
简短的回答是,10e26
和10**26
你不能代表相同的值。
10**26
,两个操作数都是int
值,计算结果为int
。Asint
表示具有任意精度的整数,它的值正好是预期的10 26。
10e26
,另一方面,是一个float
文字,因此结果值受float
机器上类型的有限精度的影响。的结果int(10e26)
是float
最接近实数 10 27的整数值。

TA贡献1772条经验 获得超5个赞
10e26
表示 10 次 10 的 26 次方,即 10 27。
10**26
代表 代表 10 的 26 次方, 10 26。
显然,这些是不同的,所以10e26 == 10**26
是假的。
但是,如果我们纠正错误,因此我们比较1e26
并10**26
通过评估1e26 == 10**26
,我们会因为不同的原因得到错误:
1e26
以有限精度的浮点格式计算,在大多数实现中产生 100000000000000004764729344。(Python 对浮点格式并不严格。) 100000000000000004764729344 是使用 53 个有效位可以得到的最接近 10 26 的值。10**26
用整数算法计算,产生 100000000000000000000000000。比较他们报告他们是不同的。
(我不确定 Python 语义,但我认为它会将浮点值转换为扩展精度整数以进行比较。如果我们将整数转换为浮点数float(10**26) == 1e26
,则 100000000000000000000000000 的转换float
会产生相同的值, 100000000000000004764729344,比较结果为真。)
添加回答
举报