accumulateの第三引数に注意(及び数値の型指定)
vector<long long>型やvector<double>型の配列 x の総和を求めるときに,
std::accumulate(x.begin(), x.end(), 0);
とすると誤差がおおきくなったり,オーバーフローしたりする。std::accumulateの仕様として第三引数の型で値が帰ってくるらしい。なので正しくはそれぞれ
std::accumulate(x.begin(), x.end(), 0LL); std::accumulate(x.begin(), x.end(), 0.0);
とする。一応数値の型指定のまとめしておく:
0 //int 0LL //int64_t 0.0 //double 0.0f //float
(2020/04/24 19:55 誤りがあったので修正しました。)
(メモ) std::cout よりも printf のほうが便利で早いこともあるっぽい,桁数固定など