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

为何numpy.arange代码输出至16.01而非预期的16.00?

为什么numpy.arange会输出超出预期的16.01?

嘿,这个问题本质上是浮点数的二进制精度限制在搞怪!我来给你掰扯清楚:

首先得明白numpy.arange的工作逻辑:它是从起始值开始,不断累加步长,直到下一个值大于等于终止值时才停止。但问题出在——像0.01这样的十进制小数,在二进制里是无限循环的,根本没法被精确表示。

你以为每次加的是精确的0.01,但实际上计算机存的是它的近似值。当你从12.01开始累加这个近似的0.01,经过几百次累加后,误差会慢慢累积。到最后,本该停止在16.00的时候,实际得到的数值可能是16.00999999999983之类的(你可以试试去掉格式化,直接打印最后一个i值看看),这个数小于终止值16.01,所以会被arange包含进来。而当你用{num:0.2f}格式化时,这个接近16.01的数就被四舍五入成了16.01。

那怎么解决呢?给你两个靠谱的办法:

  • 用整数序列来生成,再转换成小数:np.arange(1201, 1601) / 100,这样完全避开浮点数累加的精度问题。
  • 使用numpy.linspace,它可以精确控制生成的点数,比如np.linspace(12.01, 16.00, 400)(因为16.00-12.01=3.99,步长0.01的话一共400个点)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:54:31