У меня есть функция, которая генерирует некоторые большие числа, помещает их в вектор, суммирует их, возвращает сумму. Я использовал 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
, я не уверен, что проблема может быть. Я компилирую VS2012 для платформы x64.