フィボナッチ数を求める関数、Perlで書いたのをそのままC++にしたら200倍速くなったw
C++で多倍長整数ライブラリGMPを使う - 簡潔なQ
↑を参考に(そのままだ)、
Perlで算数 フィボナッチ数 - べれ野日記
↑をC++で書きなおした。
#include <iostream> #include <gmpxx.h> mpz_class fib(int max){ mpz_class n,m,f; n = 1; m = 1; for(int ii=0; ii<max; ii++){ f = n + m; n = m; m = f; } return n; } int main(int argc, char** argv){ if(argc < 1){ return 0; } std::cout << fib(std::atoi(argv[1])) << "\n"; return 0; }
$ time ./fib.pl 100000
// 中略
real 0m42.803s
user 0m42.812s
sys 0m0.016s
$ time ./a.out 100000
// 中略
real 0m0.214s
user 0m0.208s
sys 0m0.004s
Perl版42.8秒、C++版0.2秒、およそ200倍のスピードアップとなりました。
すげえ。ロジックは同じだと思うんで言語差がまるまる出た形。