为了账号安全,请及时绑定邮箱和手机立即绑定

Python 为什么是 10e26 != 10**26 ?(浮点不准确?)

Python 为什么是 10e26 != 10**26 ?(浮点不准确?)

慕仙森 2021-10-19 17:18:56
我试图在 python 中处理一些相当大的数字,但遇到了溢出错误。我决定进行更多调查,但发现了一个我无法解释的不平等。当我评估 10^26 时,我得到:>>> 10**26100000000000000000000000000这是完全合乎逻辑的。但是,当我评估 10e26 并将其转换为 int 时,我得到:>>>int(10e26)1000000000000000013287555072为什么是这样?我没有正确理解 e 符号吗?(据我所知,10e26 是 10*10^26,如这个答案所示:10e notation used with variables?)10^26 远远超过最大整数大小,所以我还想知道 python 中是否有任何机制可以允许以科学格式处理数字(不考虑所有这些零),以便能够计算过去的数字操作最大尺寸。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

简短的回答是,10e2610**26不能代表相同的值。

10**26,两个操作数都是int值,计算结果为int。Asint表示具有任意精度的整数,它的值正好是预期的10 26

10e26,另一方面,是一个float文字,因此结果值受float机器上类型的有限精度的影响。的结果int(10e26)float最接近实数 10 27的整数值。


查看完整回答
反对 回复 2021-10-19
?
月关宝盒

TA贡献1772条经验 获得超5个赞

10e26表示 10 次 10 的 26 次方,即 10 27

10**26代表 代表 10 的 26 次方, 10 26

显然,这些是不同的,所以10e26 == 10**26是假的。

但是,如果我们纠正错误,因此我们比较1e2610**26通过评估1e26 == 10**26,我们会因为不同的原因得到错误:

  • 1e26以有限精度的浮点格式计算,在大多数实现中产生 100000000000000004764729344。(Python 对浮点格式并不严格。) 100000000000000004764729344 是使用 53 个有效位可以得到的最接近 10 26 的值

  • 10**26 用整数算法计算,产生 100000000000000000000000000。

  • 比较他们报告他们是不同的。

(我不确定 Python 语义,但我认为它会将浮点值转换为扩展精度整数以进行比较。如果我们将整数转换为浮点数float(10**26) == 1e26,则 100000000000000000000000000 的转换float会产生相同的值, 100000000000000004764729344,比较结果为真。)


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号