什么';Python中的sum(65537)有什么问题?

什么';Python中的sum(65537)有什么问题?,python,python-3.x,sum,range,Python,Python 3.x,Sum,Range,我使用的是Python 3.3.2 x64,当我将sum()函数应用于范围更大的65536时,得到了错误的结果: sum(range(65537)) -2147450880 此“科学”版本预加载了NumPy和SciPy库 问题出在哪里?我假设您在使用numpy.sum()而不是Python内置的sum()函数时遇到了问题。根据: dtype:返回数组的类型和元素求和的累加器的类型。默认情况下,将使用的数据类型为。例外情况是,当具有精度低于默认平台整数的整数类型时。在这种情况下,将使用默认的平台

我使用的是Python 3.3.2 x64,当我将
sum()
函数应用于范围更大的
65536
时,得到了错误的结果:

sum(range(65537))
-2147450880
此“科学”版本预加载了
NumPy
SciPy


问题出在哪里?

我假设您在使用
numpy.sum()
而不是Python内置的
sum()
函数时遇到了问题。根据:

dtype:返回数组的类型和元素求和的累加器的类型。默认情况下,将使用的数据类型为。例外情况是,当具有精度低于默认平台整数的整数类型时。在这种情况下,将使用默认的平台整数

尝试手动设置
dtype

import numpy as np
np.sum(range(65537), dtype=np.int64)
结果:

2147516416

无法再现错误,我得到了
2147516416
。Python 2.7、3.3和3.4.0也无法复制。至少CPython在内部使用可扩展的int类型,所以这种情况通常不会发生,因为这样可以防止整数溢出——底层存储刚好增长给出了正确的答案。我强烈建议不要使用任何与numpy import*中的
等效的环境。不仅
sum
,而且
any
all
都被替换,这可以给出完全相反的答案。谢谢@Selcuk,它成功了。我读过,但我不太清楚如何使用它。非常感谢。