mpf2mpfr.h
おそらくあなたが望むものではありません。これには#define
、以降のすべてで mpf 名を mpfr 名に置き換えるための多くの情報が含まれています。あなたのケースでそれが機能する可能性が必要な場合は、mpf2mpfr.h
beforeを含める必要がありますgmpxx.h
。ただし、ファイルはすべてを翻訳するわけではありません。以下では、C++03 でコンパイルできます (に変換しない限りmpq_class
)。
#include <mpfr.h>
#include <mpf2mpfr.h>
void mpfr_get_q (mpq_ptr, mpfr_srcptr);
#undef mpq_set_f
#define mpq_set_f(x,y) mpfr_get_q(x,y)
#include <gmpxx.h>
int main(){
mpf_class x=.73;
mpf_class y;
mpfr_sin(y.get_mpf_t(),x.get_mpf_t(),MPFR_RNDN);
}
ただし、たとえば、で印刷しようとするとoperator<<
、数値の代わりにポインターが印刷されます。C++11 で提供される追加の関数には、さらに微調整が必要です。それらを無効にする方が簡単#define __GMPXX_USE_CXX11 0
ですgmpxx.h
。
これを解決するには主に 2 つの方法があり、どちらも を削除することから始めmpf2mpfr.h
ます。最初のものは一時的なものを作成することmpfr_t
です:
mpf_class x=.73;
mpf_class y;
mpfr_t xx;
mpfr_t yy;
mpfr_init_set_f(xx, x.get_mpf_t(), MPFR_RNDN);
mpfr_init(yy);
mpfr_sin(yy, xx, MPFR_RNDN);
mpfr_get_f(y.get_mpf_t(), yy, MPFR_RNDN);
2 つ目は、mpf を完全に削除して mpfr のみを使用することです。そのWeb ページには 6 つの C++ ラッパーがリストされており、そのうちのいくつかはまだ維持されています。