特にKVライブラリのintervalと組み合わせて使うために、簡単な ラッパーを実装した。例えば106bitの浮動小数点数を使いたいなら、 kv::mpfr<106>という型を使えばよい。 本来のmpfrは混合精度の計算が可能だが、本ラッパーはtemplate parameterで 精度を一律に固定してしまう簡易的なものである。
doubleに対するrdouble.hpp, dd.hppに対するrdd.hppと同様に、 方向付き丸めのためのrmpfr.hppも作成した。 mpfr.hppと併せて使用すると、高精度区間演算を実現できる。
コンパイル時には、必要ならば-Iや-Lでmpfrのheaderやlibraryの在処を 指定し、-lmpfrが必要。
また、mpfr本体はおそらくversion 3.1以上が必要。
まだ十分テストされていない。
あるマシン (core i7 4600U) である全解探索問題 (5つの解を持つ 非線形回路方程式) を解いたときの計算時間を示す。
使った型 | 計算時間 | コンパイルオプション |
---|---|---|
double | 5.96sec | -DKV_FASTROUND -DNDEBUG -O3 |
dd | 29.9sec | -DKV_FASTROUND -DNDEBUG -O3 |
mpfr<53> | 326sec | -DNDEBUG -O3 |
mpfr<106> | 415sec | -DNDEBUG -O3 |
これを見ると、53bit(doubleと同じ精度)や106bit(ddと同じ精度)では あまり使う意味が無いことが分かる。ddより更に高い精度がどうしても 必要な場合に仕方なく、といった使い方になると思われる。