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

Python中最大浮点数加多少会触发无穷大?技术探究

Python浮点数溢出的临界值分析

Python中规定的最大双精度浮点数可通过公式计算:

l = 2**(1023) * (2 - 2**(-52))

1.7976931348623157e+308

也能直接通过系统内置属性验证该值:

import sys
sys.float_info.max

1.7976931348623157e+308

但实际计算时会出现两种截然不同的结果:

  • 乘以极小的增量值,结果仍等于最大浮点数:

    1.0000000000000000000000000001 * l
    

    1.7976931348623157e+308

  • 乘以稍大的增量值,结果直接变为无穷大inf:

    1.00006 * l
    

    inf

溢出的临界值范围

触发无穷大的临界值介于 sys.float_info.max + 0.5*epsilon 和 sys.float_info.max + 0.51*epsilon 之间,其中epsilon = 2**-52是双精度浮点数的机器epsilon(即浮点数能表示的最小相对精度)。

验证代码

import sys
l = sys.float_info.max
epsilon = 2**-52

# 结果仍为最大浮点数
(1 + 0.5*epsilon) * l

1.7976931348623157e+308

# 溢出为无穷大
(1 + 0.51*epsilon) * l

inf

原理说明

这是由IEEE 754双精度浮点数的存储规则决定的:

  • 双精度浮点数用64位存储,包含52位尾数、11位指数。最大指数对应的尾数最大值是2 - 2**-52,这就是sys.float_info.max的计算逻辑。
  • 浮点数的精度是相对的,epsilon是最大浮点数l对应的最小可表示增量的比例值,0.5*epsilon*l是这个最小增量的一半。
  • 当计算结果超过l但未超过l + 0.5*epsilon*l时,会被舍入回l;当结果超过这个阈值时,无法用现有浮点数表示,就会溢出为inf。

内容的提问来源于stack exchange,提问作者Herman Jaramillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:36:07