時々、多倍長計算したい人が出て来る。 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 と打てばコンパイル出来るようにしたつもりだと思うが、 次のことに注意。
MacPorts で GCC9 をインストール |
sudo port install gcc9 sudo port select --set gcc mp-gcc9 |
bash や zsh では
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"tcsh では setenv SDKROOT `xcrun --sdk macosx --show-sdk-path` |
以上を注意すると、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 |
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 で動かすには、アセンブリ言語のプログラムを書かないといけないのかな? うーむ、、、