● mpf_t と double 演算速度の比較

 実際的な処理を mpf_t 型と double 型で行った場合、所要時間の比はどのくらいか調べます。 処理時間の比較ですから、mpf_t の仮数部精度は double の 2 倍程度を目標にします。 limb を 4 つ使って仮数部 128 bit にすれば、10 進で 38.5 桁ほどになります。

 マチンの公式を使ってπの値を求めるプログラムを改変して使いました。 実行所要時間は clock() で測ります。 1 回の計算では速すぎて時間測定ができませんので、多数回ループ実行させました。 全体が数秒で終わるようにループの回数を決め、さらに mpf_t と double での所要時間がほぼ同じになるように、double 型の方のループ回数を増やしました。

 ソースプログラム


 実行結果:

mpf_t                     <* mpf_t 型を使用
5: 1842ms
239: 661ms
1415926535 8979323846 2643383279 5028842   <* "3." は省略

double                    <* double 型を使用
5: 1853ms
239: 611ms
3.141592653589794e+00

 mpf_t 型の場合は 50000 回、double 型の場合は 17 * 50000 回ループさせています。 したがって double に対する処理時間の比は約 17 でした。 もちろん使用するプログラムや動作環境によって、速度比は大幅に変わることもあり得ます。

 思ったより高速でした。 実は 100 倍かそれ以上も遅いのではないかと思っていたのです。 たいへん失礼致しました。


  Top に戻る