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,比较结果为真。)
添加回答
举报
