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

使用np.arange时for循环迭代器为何会超出上界?

为什么np.arange(0.2, 0.8, 0.01)会生成超过终止值的元素?

这是浮点数精度误差和np.arange的实现逻辑共同导致的,具体原因如下:

1. np.arange的生成逻辑

np.arange不是通过计算(stop-start)/step确定步数,而是通过逐次累加step生成序列:从start开始,每次加step,直到下一个值大于等于stop时停止。但浮点数精度误差会直接影响这一判断,导致最终生成的某个值刚好超过stop的实际存储值,从而被包含在序列中。

2. 浮点数的精度限制

像0.2、0.01这类十进制小数,无法在二进制浮点数中精确表示——它们的二进制是无限循环的,存储时只能取近似值。例如:

  • 0.2的实际存储值是0.20000000000000001110...
  • 0.01的实际存储值是0.01000000000000000021...

多次累加这些近似值时,误差会逐步累积。理论上0.2 + 60*0.01 = 0.8,但实际累加后的结果可能是0.8000000000000002...,而0.8本身的存储值是0.8000000000000000444...,此时累加结果就会略大于0.8的存储值,导致你看到i > end为True。

3. 为什么其他组合没出现问题?

浮点数误差的累积方向和大小具有随机性,只有当误差刚好让最后一次累加的结果超过stop的存储值时,才会出现这个现象。其他起始/终止值组合可能刚好误差累积的程度没触发这一情况,但本质上浮点数精度问题一直存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25