MPFRを使って逆数を求める
MPFRはGMPのmpf_t型に関する計算を含む形で拡張されているので、
GMPだけで閉じたいとかでないようなら、
MPFRを使うことも検討した方がいいかもしれない。
でもこの場合はやりたければ簡単に計算の丸めを制御できるくらいで、
あまりMPFRにする意味はないかもしれない。
#include <mpfr.h> #ifndef MPFR_RNDN #define MPFR_RNDN GMP_RNDN #endif int main(void) { mpfr_t c; mpfr_init2(c, 200); mpfr_set_ui(c, 29, MPFR_RNDN); mpfr_ui_div(c, 1, c, MPFR_RNDN); mpfr_printf("%.60Rf\n", c); mpfr_clear(c); return 0; }
もう見掛けからしてmpfなんちゃらがmpfrなんちゃらになっただけっぽいが、
実行して得られる結果もGMP版とそのまま同じである。
以前にも書いたが、丸めを制御するマクロMPFR_RNDN
はMPFR 3.0でGMP_RNDN
から名前が変わった。
過去のソースとの互換性のために、GMP_RNDN
がMPFR_RNDN
を使って定義されている。
しかし、手元の環境のうちMinGWのMPFRは古いので、上では逆にMPFR_RNDN
をGMP_RNDN
で定義している。
新しいMPFRならMPFR_RNDN
を定義している部分は不要であるが、あっても問題はない。
マクロ定義なしで関数呼び出しの引数にGMP_RNDN
を使えば新しい版でも古い版でもコンパイルできるが、
新しい書き方に合わせておいた方がいいのだろうという気がする。