Python 中整数与浮点数在数字非常大时,大概会溢出

打印 上一主题 下一主题

主题 1668|帖子 1668|积分 5004

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题涉及 Python 中整数与浮点数在计算机中的表现方式,特别是当数字非常大时,大概会发生的溢出问题。
问题解析:

在你的代码中:
  1. (1 + (d1mm < d3mm)*2) * 10**11
  2. Out[19]: 300000000000
复制代码
这个表达式的效果是正常的,(1 + (d1mm < d3mm)*2) 计算的效果是 3,然后乘以 10**11 得到了 300000000000。
而在下面这个表达式中:
  1. (1 + (d1mm < d3mm)*2) * 10**9
  2. Out[20]: -1294967296
复制代码
效果却是负数,这是因为数值溢出了。
关键问题:数值溢出

在 Python 中,整数类型可以动态扩展,通常不会溢出。然而,如果计算效果存储为某种受限的数据类型(例如 C 类型的 32 位整数),就会发生溢出。
在这里,大概的情况是,当你乘以 10**9 时,数值转换为 32 位整数。而 32 位整数的最大值是 2,147,483,647,任何超过这个值的正整数都会溢出,导致得到一个负值。
具体来说:


  • 3 * 10**9 = 3,000,000,000 超过了 32 位整数的上限 2,147,483,647。
  • 因此,计算溢出,效果变成负数。
解决方法:

确保在计算中利用 Python 的大整数类型(int),制止受限于 32 位整数。如果你在某个计算环境中,数据类型是受限的(例如利用 C 语言接口或老版本的库),你大概必要显式地控制数据类型。
在常规的 Python 代码中,如许写应该不会有问题:
  1. result = (1 + (d1mm < d3mm)*2) * 10**9
  2. print(result)
复制代码
如许应该返回 3000000000,而不是溢出的负值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表