You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中指数形式数值加1无变化,加2却生效?求解析

为什么给大浮点数加1无变化,加2却生效?

先看你给出的代码:

num = 1.1920928955078124e+16
print(num)     # == 1.1920928955078124e+16
print(num + 1) # == 1.1920928955078124e+16
print(num + 2) # == 1.1920928955078126e+16

这个现象的核心原因是Python的float类型是64位双精度浮点数,存在精度限制:

  • 双精度浮点数用52位存储尾数(加上隐含的1位,共53位有效精度),这意味着它只能精确表示2^53以内的整数(约9.007×10¹⁵)。
  • 当数值超过2^53后,相邻两个可被精确存储的浮点数之间的间隔(称为ulp,单位最后位置)会大于1。对于你使用的1.1920928955078124e+16,它处于2^53到2^54的区间内,此时的ulp是2——也就是说,这个范围内的浮点数只能以2为步长被精确表示。

所以:

  • 给num加1后,结果无法被精确存储,会被舍入到最近的可表示浮点数,也就是原数值num;
  • 给num加2后,刚好等于下一个可被精确表示的浮点数,因此能得到正确的结果。

你可以用math.nextafter验证这一点:

import math
print(math.nextafter(num, float('inf')))  # 输出 1.1920928955078126e+16,和num+2的结果一致

内容的提问来源于stack exchange,提问作者Jack Lantern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:05:31