いくつかの大きな数値を生成し、それらをベクトルに入れ、それらを合計し、合計を返す関数があります。合計を計算するために使用してい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
が等しいことを期待します。ただし、sum は に等しく470064632
、test sum は に等しく82074443256
、これは期待値です。
制限をもっと小さい数 (500) に減らしてみたところ、 と の値は等しくsum
なりました。testSum
これにより、エラーが でオーバーフローしていると思いますが、accumulate
何が問題なのかわかりません。x64 プラットフォーム用に VS2012 でコンパイルしています。