61 2021年2月の exflib

時々、多倍長計算したい人が出て来る。 C++ で MPFR とか exflib とか。 Julia で BigFloat とか。


MPFR がメジャーかな、とも思うけれど、 made in Japan (だから日本語ドキュメントがある) の exflib も捨てがたい。


以前 「exflib を使ってみる (2018年秋)」 というのを書いた。


今でも大体その通りに動く。一部変更が必要なので、改めて書き直す。

「Download」 によると、2021年2月10日時点の最新版は exflib-x64-bin-20201016.tar.bz2 である。

curl -O http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/exflib/exflib-x64-bin-20201016.tar.bz2
tar xjf exflib-x64-bin-20201016.tar.bz2
cd exflib-x64-bin-20201016/sample-cxx

作者は、ここで make と打てばコンパイル出来るようにしたつもりだと思うが、 次のことに注意。

以上を注意すると、make としてコンパイルが出来るようである。

exfloat.h, libexfloat.a をコピーしておくと良いかも。
exflib-x64-bin-20201016/sample-cxx にいるとして
sudo mkdir -p /usr/local/include /usr/local/lib
sudo cp -p ../exflib-x86_64-intelmac/exfloat.h /usr/local/include
sudo cp -p ../exflib-x86_64-intelmac/libexfloat.a /usr/local/lib
こうしておくと、次のようにコンパイルが出来る。
g++ -I/usr/local/include test-exflib-1.cpp -L/usr/local/lib -lexfloat
./a.out
test-exflib-1.cpp が欲しければ
curl -O http://nalab.mind.meiji.ac.jp/~mk/misc/20210210/test-exflib-1.cpp
とする。

test-exflib-1.cpp
// test-exflib-1.cpp

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

int main(void)
{
  exfloat x, y;

  x = "1/3";
  cout << setprecision(PRECISION) << x << endl;

  y = 1;
  y /= 3;
  cout << y << endl;

  x = "#PI";
  cout << x << endl;

  return 0;
}


exflib には日本語チュートリアル 「exflib Getting Started with C++」 がある。

(2021/2/11) M1 Mac で動かすには、アセンブリ言語のプログラムを書かないといけないのかな? うーむ、、、



桂田 祐史