私はGoを学習しています。math/big
パッケージを使用して任意の長さの整数を処理し始めました。GoでGMPスタイルのパフォーマンスで大きな数字を扱う
Iはn番目のフィボナッチ数を計算し、このプログラムを書いた:(import
秒削除):
int main(int argc, char** argv)
{
int imax = atoi(argv[1]);
mpz_t a, b, c;
mpz_inits(a, b, c, NULL);
mpz_set_ui(a, 0);
mpz_set_ui(b, 1);
int i = 0;
for (i = 0; i < imax; i++) {
mpz_swap(a, b);
mpz_add(b, a, b);
}
char* astr = NULL;
astr = mpz_get_str(NULL, 10, a);
printf("%s\n", astr);
return EXIT_SUCCESS;
}
囲碁プログラムを計算:
func main() {
imax, _ := strconv.Atoi(os.Args[1])
var a, b, c big.Int
a.SetUint64(0)
b.SetUint64(1)
for i := 0; i < imax; i++ {
c.Set(&b)
b.Add(&b, &a)
a.Set(&c)
}
fmt.Println(a.String())
}
ここでCプログラムのためのコードですGMP libを使用した場合のCの等価物は0.04秒でのみ実行されます。それは2倍遅いです。
私のGoプログラムで同じパフォーマンスを得る方法はありますか?
これはコードレビューのリクエストであるため、このトピックをオフトピックとして閉じることにしました。 – Olaf
コードレビューのリクエストはどうですか?私はこのプログラムを特に最適化するのではなく、2つの言語で同じperfsを得る方法を学ぶことを望んでいます。私は、偏っていないベンチマークを得るために、2つのプログラムを可能な限り似ているようにしようとしました。答えは、例えば、他の任意精度の算術Goライブラリであってもよい。 – Arno
操作を比較する場合は、再現可能なベンチマークを設定する必要があります。コードのコンパイル方法と実行方法はわかりません。私のシステムでは、goコードは〜55msで10000を計算します。 – JimB