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

为何用Numpy计算1至1500000的和得负数,for循环结果正常?

问题原因解析

这是整数溢出导致的:

  • Numpy的np.arange()默认生成int32类型的数组,而int32能存储的最大值是2^31-1 = 2147483647。
  • 你计算的1到1499999的和是(1499999 * 1500000) / 2 = 1124999250000,这个数值远超int32的上限,触发溢出后数值会绕回成负数。
  • 而Python原生的int是动态扩容的任意精度整数,不存在溢出限制,所以for循环能得到正确结果。

验证与解决方法

手动指定numpy数组为更高精度的整数类型(比如int64),就能得到正确结果:

import numpy as np
import time

start = time.time()
print('sum is: ', np.sum(np.arange(1500000, dtype=np.int64)))
end = time.time()
print("duration: ", end - start)

# 输出结果:sum is:  1124999250000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:50:54