(色々楽しいものが多い。欲しいと考えるものが用意されている感じで、 この調子で頑張ってほしいものだ。)
多倍長浮動小数点演算ライブラリ MPFR を、 C++ 言語のプログラムから呼び出せるようにした、 という意味で「ラッパー」と呼んでいるのだろう。
#include <kv/mpfr.hpp>
これで kv::mpfr<仮数部ビット数> という型が使えるようになる。
2進200桁で自然対数の底を計算してみる。
| mytest-kvmpfr.cc |
/*
* mytest-kvmpfr.cc
* g++ -I/usr/local/include -I/opt/local/include -L/opt/local/lib mytest-kvmpfr.cc -lmpfr
*/
#include <iostream>
#include <kv/mpfr.hpp>
int main(void)
{
int n;
kv::mpfr<200> t, s, news;
std::precision(61);
s = t = 1;
for (n = 1; n <= 100; n++) {
t /= n;
news = s + t;
if (s == news)
break;
s = news;
std::cout << s << std::endl;
}
std::cout << " 1234567890123456789012345678901234567890123456789012345678901234567890" << std::endl;
std::cout << "2.718281828459045235360287471352662497757247093699959574966967627724077" << std::endl;
return 0;
}
|
ついでに言うと
std::cout.precision(61);
std::cout << std::setprecision(61) << s << std::endl;
同じことをするプログラムを C で書くとどうなるか、 http://nalab.mind.meiji.ac.jp/~mk/labo/text/on-multiprecision/node15.htmlを見ると良い。 ラップして C++ で使うことは幸せだと良く分かる。
(脱線: こうして使う MPFR と exflib を使い比べてみたい。 ふと疑問に感じたのだけど、kv は Fortran から使えるのかな?)
桂田 祐史