Visual C++で多倍長演算ライブラリを使う

任意精度の演算ができるライブラリと言えばGMPだが、
Windows環境では使いにくいのが欠点。
そしたら、GMPからフォークしたMPIRというライブラリがあった。
ダウンロードしたら、Visual C++ 2010用のmpir.slnがあるのでそれを開く。
次にビルドだが、自分の場合はSSE2対応の32bitCPUなので、
dll_mpir_p4(Pentium 4以降向け)を選んでビルドした。
アセンブラの部分は、yasmを使う。
VS2010用のvsyasm.exeを、パスの通った場所に置く。

生成されたmpir.libと、一緒に置いてあるヘッダファイルを持ってきて、
mpir.dllをリンクし、mpirxx.hをインクルード、実行時にはmpir.dllも必要。

これで円周率の計算なども簡単にできる。
mpf_set_default_precで桁数(2進法で)を指定し、mpf_classを使う。
a = (a + b) / 2; などと書けるのでとても楽しい。

計算速度は、アセンブラ版が速い。そうでないものの5倍くらいの速さだった。
64bitのアセンブラなら、更に倍くらい速いらしい。
最初、GMPC言語版をビルドして使ったら、スーパーπの倍以上遅かったが、
MPIRを使うとあっさり追い抜くことができた。

ドキュメント類は、MPIRのページにもあるし、GMPのものでもいい。
GMPで書いたコードは、たぶんそのまま動く。
あとは、GMPやMPIRやmpf_classやmpf_addなんかで検索。色々出てくる。