###解決!
回答頂いた@LouiS0616さんありがとうございました。
第3引数を 0→0LL に変更すると正常動作しました。
std::vector<long long> test2(10000, 2000000); std::cout << (long long)std::accumulate(test2.begin(), test2.end(), 0LL) << std::endl;
###知りたいこと
std::accumulate
を利用した計算結果を(long long)型で得たい。
(とある問題では12桁以上必要になります)
これが仕様なのか何か基本的なミスなのかアドバイスなどご教示頂けると助かります。
###現状
とある問題で小さい桁の答えは出るのに大きい桁の答えがおかしいので調べてみるとstd::accumulate
の結果がおかしいことを突き止めました。
その部分をfor文で単純計算させるとほしい結果が得られることは確認できました。
配列や計算に関連する部分を全て(long long)にしても結果変わらず。
最大桁数の(long long)
でキャストしてみても結果変わらず。
以下、質問用に最低限の部分のみ抜き出したサンプルコードです。
###サンプルコード
C++
1#include <cstdio> 2#include <iostream> 3#include <vector> 4#include <numeric> 5 6int main() 7{ 8 std::vector<long long> test1(10000, 1000000); 9 std::cout << (long long)std::accumulate(test1.begin(), test1.end(), 0) 10 << std::endl; 11 12 std::vector<long long> test2(10000, 2000000); 13 std::cout << (long long)std::accumulate(test2.begin(), test2.end(), 0) 14 << std::endl; 15 16 getchar(); 17 return 0; 18}
出力結果
1410065408 -1474836480

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/30 01:34