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

为什么Python中不同浮点数的差值为0?Python3代码疑问解析

为什么Python中不同浮点数相减结果为0?

这本质是双精度浮点数的精度限制导致的问题,Python里的float类型采用IEEE 754标准的64位双精度浮点数,它的存储结构决定了无法精确表示所有十进制数,尤其是超出特定范围的整数。

针对你给出的代码分析

先拆解代码里的两个数值:

  • a的原始字符串"4.15129406851375e+17"转换成十进制整数是415129406851375000
  • b的原始字符串"415129406851375001"比a大1

但双精度浮点数只能精确表示**-253到253之间**的所有整数(2^53约等于9.007e15),而你的数值是4.15e17,远大于这个范围。当数值超出该范围后,浮点数无法区分相邻的整数——此时两个相邻可表示的浮点数之间的间隔(称为ULP,最小精度单位)会大于1。

对于4.15e17这个量级的数,ULP已经是2了,所以415129406851375000和415129406851375001这两个数,在转换成float时会被存储为同一个值。因此a和b实际是同一个浮点数,相减结果自然为0。

验证方法

你可以直接打印a和b的具体值,会发现它们完全相同:

a = "4.15129406851375e+17"
a = float(a)
b = "415129406851375001"
b = float(b)
print(a)  # 输出4.15129406851375e+17
print(b)  # 同样输出4.15129406851375e+17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:25:30