4.8 MPFRラッパー

(色々楽しいものが多い。欲しいと考えるものが用意されている感じで、 この調子で頑張ってほしいものだ。)

多倍長浮動小数点演算ライブラリ 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 から使えるのかな?)

桂田 祐史
2016-03-04