(注:私はGMPYを維持する助けと私は最新のリリースでは、かなりの数の最適化を実装しました)MPZに小さな数を追加する際に
GMPY v1.11デベロッパーがmpz_add_ui
を使用しません。 GMPYの最新バージョンは、以前のバージョンよりも約25%高速です。
With GMPY 1.04
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000)" "a+1"
10000000 loops, best of 3: 0.18 usec per loop
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000);b=gmpy.mpz(1)" "a+b"
10000000 loops, best of 3: 0.153 usec per loop
With GMPY 1.11
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000)" "a+1"
10000000 loops, best of 3: 0.127 usec per loop
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000);b=gmpy.mpz(1)" "a+b"
10000000 loops, best of 3: 0.148 usec per loop
MPZにPythonのint型に変換するよりも、それは長いにPythonのint型に変換し、mpz_add_ui
を呼び出すために高速ですので、適度なパフォーマンス上の利点があります。長い間GMP関数をネイティブ演算と呼び出す場合のパフォーマンスが10倍になると、私は驚くことはありません。
小さな番号のいくつかを1つのlong longに蓄積し、一度に大きな番号に追加できますか?
興味深い。私は算術演算のC++オーバーロードを使用しています。おそらくこれらのC++バインディングもこの簡単な方法を利用していません。私は明日いくつかのテストをします。ありがとう! – sligocki