The GNU MPFR Library のリストにあった Programming mpfr::real を試す。 そのサイトから mpfr_real_v0.0.9-alpha.tar.gz を持って来た。 2012年版だ。
tar xzf mpfr_real_v0.0.9-alpha.tar.gz cd mpfr_real_v0.0.9-alpha |
real.hpp というのが、唯一コンパイルに必要なファイルであるとか (4700行くらい)。
sudo cp -p readl.hpp mpfr_header_wrapper.hpp /usr/local/include sudo ln -s /usr/local/include/real.hpp /opt/local/include sudo ln -s /usr/local/include/mpfr_header_wapper.hpp /opt/local/include |
``Comparison with Other MPFR C++ Wrappers'' という項があり、 MPFR C++ - Pavel Holoborodko との比較が書いてある。 こちらは cmath にある数学関数は完備している、とのこと (MPFR C++ の方はどうなんだろう?)。
テストしてみる。比較用の出力結果を添えたテスト・プログラムが用意されている (こういうのは他の人も見習ってほしいものだ)。
real_operator_test.cpp から。
g++ -I/opt/local/include real_operator_test.cpp -L/opt/local/lib -lmpfr -lgmp g++-mp-6 real_operator_test.cpp -L/opt/local/lib -lmpfr -lgmp g++-mp-5 real_operator_test.cpp -L/opt/local/lib -lmpfr -lgmp |
./a.out > real_operator_test.txt diff real_operator_test.txt test_output/real_operator_test.txt |
次は real_function_test.cpp を試す。
g++ -I/opt/local/include real_function_test.cpp -L/opt/local/lib -lmpfr -lgmp g++-mp-6 real_function_test.cpp -L/opt/local/lib -lmpfr -lgmp g++-mp-5 real_function_test.cpp -L/opt/local/lib -lmpfr -lgmp |
実はオリジナルの real_function_test.cpp のままでは、 LLVM の g++ ではコンパイル出来たが、 g++-mp-5 や g++-mp-6 ではコンパイル出来なかった。 次のように real_function_test.cpp を書き換えた。
$ diff real_function_test.cpp.org real_function_test.cpp 457c457 < << std::setw(17) << isinf(a1); --- > << std::setw(17) << std::isinf(a1); 459c459 < std::cout << std::setw(20) << type2char(isinf(a1)); --- > std::cout << std::setw(20) << type2char(std::isinf(a1)); 495c495 < << std::setw(17) << isnan(a1); --- > << std::setw(17) << std::isnan(a1); 497c497 < std::cout << std::setw(20) << type2char(isnan(a1)); --- > std::cout << std::setw(20) << type2char(std::isnan(a1)); |
比較結果。
diff real_function_test.txt-5 test_output/real_function_test.txt 32c32 < acosh(a1) double 0.70711 nan double --- > acosh(a1) double 0.70711 -nan double |
何か良く分からない。
桂田 祐史