引き続き多倍超計算ライブラリィの話。
GNU MPFR を使ってみよう、と考えた。 C++ のインターフェイスはどうなっているんだっけ? (本当は、MPFR 自体が C++ インターフェイス持っていれば良いんだよな…) The GNU MPFR Library を見たら、 百花繚乱になっているらしいことが分かった。 うーん。 まずは ``MPFR C++'' の検索でトップに出て来た MPFR C++ - Pavel Holoborodko をやってみる。
ライセンスは GPL である。と書いてあるけれど、
| MPFR C++ is free for usage in free projects. If you intend to use it in commercial application please contact author for permission. |
boost で使っていると書いてある (本当?)。
Eigen で使うには、
#include <unsupported/Eigen/MPRealSupport> |
とにかくやってみよう。mpfrc++-3.6.2.zip (2015年7月に出来た?) を入手して
mkdir mpfrc++-3.6.2 cd mpfrc++-3.6.2 unzip ../mpfrc++-3.6.2.zip |
MPFR 自体は、MacPorts でインストールされているので、 /opt/local/include, /opt/local/lib に置かれている。
mpreal.h はどこに置くのが良いか。 自分で導入したものなので /usr/local/include が自然か。 ここに置いておくと、LLVM の g++ は無指定で見てくれる。 一方で、MacPorts で入れた GCC の g++ は、 /opt/local/include を無指定で見てくれる。 そこで
sudo cp -p mpreal.h /usr/local/include sudo ln -s /usr/local/include/mpreal.h /opt/local/include |
サンプル・プログラムは唯一 example.cpp がついている (107行)。それはあっさり動いた。
再び、
,
(
) で定義される数列の第
項の計算。
/*
* test-mpfrcc++.cpp
* 準備
* (1) http://www.holoborodko.com/pavel/mpfr/ から mpfrc++-3.6.2.zip 入手
* unzip mpfrc++-3.6.2.zip として出て来る mpreal.h を適当な場所におく。
* (2) MPFR を用意する。MacPorts を使っていると、/opt/local にあるだろう。
* コンパイル
* g++ -I/opt/local/include test-mpfrc++.cpp -L/opt/local/lib -lmpfr
*/
#include <iostream>
#include "mpreal.h"
using namespace std;
int main(void)
{
using mpfr::mpreal;
const int digits = 50;
mpreal::set_default_prec(mpfr::digits2bits(digits));
mpreal a;
int i;
cout.precision(digits);
a = 1;
for (i = 2; i <= 100; i++)
a = 3 * a + 2;
cout << a << endl;
return 0;
}
|
g++-mp-6 test-mpfrc++.cpp -L/opt/local/lib -lmpfrあるいは g++-mp-5 -std=c+11 test-mpfrc++.cpp -L/opt/local/lib -lmpfrあるいは g++ -I/opt/local/include test-mpfrc++.cpp -L/opt/local/lib -lmpfr |
桂田 祐史