我有一个函数可以生成一些大数,将它们放入一个向量中,对它们求和,然后返回总和。我一直在用std::accumulate
它来计算总和,但是,经过一些测试,我意识到它没有返回预期的总和。
typedef unsigned long long ull;
ull sum(ull kLimit)
{
ull testSum = 0;
vector<ull> numbers;
for (ull n = 0; n < kLimit; ++n) {
if (/* number I want */) {
numbers.push_back(n);
// directly sum for testing
testSum += n;
}
}
ull sum = accumulate(begin(numbers), end(numbers), 0);
return sum;
}
我希望sum
和的值testSum
相等。但是,总和等于470064632
,测试总和等于82074443256
,这是期望值。
我尝试将限制减少到一个更小的数字(500),并且 和 的值sum
相等testSum
。这让我认为错误是溢出的accumulate
,但我不确定问题可能是什么。我正在为 x64 平台使用 VS2012 进行编译。