この関数のベンチマークを行ったとき、私は驚きました:
int f(int N = 999) {
int nMax = 0;
for (int i = 1; i <= N; ++i)
for (int j = i; j <= N; ++j) {
string digits = to_string(i*j);
string rDigits = digits;
reverse(rDigits.begin(), rDigits.end());
if (digits == rDigits)
nMax = max(i*j, nMax);
}
return nMax;
}
Windows 7 32 ビットおよび 64 ビットで VS2012、VS2013 (リリース、/O2)、および MinGW 4.8.0、4.8.1 (-Ofast) を使用。MinGW でビルドされたバージョンは、VS のものよりも約 13 倍遅いことに気付きました。これは と の実装に問題がto_string()
ありreverse()
ますか? 他の理由はありますか?
私が使用したコードはこちらです: https://github.com/pauljurczak/Benchmark-2/blob/master/benchmark.cpp
編集
問題を機能するように絞り込みましたstd::to_string()
。MinGW では VS よりも約 16 倍遅くなります。テストには次のスニペットを使用しました。
int f(int N = 100000) {
int len = 0;
for (int i = 0; i <= N; ++i)
len += to_string(i).length();
return len;
}
Ubuntu で g++ 4.7.3 でコンパイルすると、パフォーマンスは VS2012 とほぼ同じです。