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_RNDNMPFR_RNDNを使って定義されている。
しかし、手元の環境のうちMinGWのMPFRは古いので、上では逆にMPFR_RNDNGMP_RNDNで定義している。
新しいMPFRならMPFR_RNDNを定義している部分は不要であるが、あっても問題はない。
マクロ定義なしで関数呼び出しの引数にGMP_RNDNを使えば新しい版でも古い版でもコンパイルできるが、
新しい書き方に合わせておいた方がいいのだろうという気がする。