16 ひさしぶりに exflib

「それを超えるときは、多倍長計算ライブラリィを使いましょう」 と言ったせいで、やる羽目に。

過去の研究で使ったことのある exflib - extend precision floating-point arithmetic library を試してみる。 exflib を MATLABで使えるようにしよう、という話があって、とても期待している。 (以前使ったときのメモが http://nalab.mind.meiji.ac.jp/~mk/labo/text/on-multiprecision/node8.htmlにある。インストールの仕方とかは更新しておかないと…)


exflib-x64-bin-20161003.tar.bz2 を入手した (2016/11/11)。

試しにテスト・プログラムをコンパイルしてみる。 Xcode の g++ は、正体が LLVM だから、 GCC の g++ を使うようにするのが注意点。 最近の自分の Mac は、MacPorts で入れた g++-mp-6 があるので、 それを使うように Makefile を書き換えて実行する。
tar xjf exflib-x64-bin-20161003.tar.bz2
exflib-x64-bin-20161003
cd sample-cxx
(Makefile を開いて、 CXXg++-mp-6 とセット)
make
すべてコンパイルできた (ちなみに LLVM の g++ ではコンパイル出来ないものがあった)。 個々のサンプル・プログラムがどういうものであるかは、 「ソースを読め」みたいだ。

ドキュメントとして、doc に c++.pdf (12ページ), fortran.pdf (16ページ) がある。

とりあえず /usr/local/{include,lib} にインストールすることにした。
sudo cp -p exflib-x86_64-intelmac/libexfloat.a /usr/local/lib
sudo cp -p exflib-x86_64-intelmac/*.h /usr/local/include

$ a_1=1$ , $ a_{n+1}=3a_n+2$ ($ n\in\N$ ) で定まる数列の第$ 100$ 項を表示する。

kadai4.cpp
/*
 * kadai4.cpp
 *  g++ -I/usr/local/include kadai4.cpp -lexfloat
 */

#define PRECISION 100
#include <iostream>
#include "exfloat.h"
using namespace std;

int main(void)
{
  int i;
  exfloat a;

  a = 1;
  for (i = 2; i <= 100; i++)
    a = 3 * a + 2;

  cout << setprecision(PRECISION) << a << endl;

  return 0;
}

g++-mp-6 -I/usr/local/include kadai4.cpp -lexfloat

何故か、表示がおかしいことがあったけれど、、やり直したら上手く行った。 どうしたんだろう?

桂田 祐史
2018-03-01