什么';Python中的sum(65537)有什么问题?
我使用的是Python 3.3.2 x64,当我将什么';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:返回数组的类型和元素求和的累加器的类型。默认情况下,将使用的数据类型为。例外情况是,当具有精度低于默认平台整数的整数类型时。在这种情况下,将使用默认的平台
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,它成功了。我读过,但我不太清楚如何使用它。非常感谢。