mpf2mpfr.h
당신이 원하는 것을 아마 당신을 감사드립니다. 그것은 #define
을 많이 포함하고 있으며 그 다음에 나오는 모든 것에 mpf 이름을 mpfr 이름으로 대체합니다. 자신의 케이스에서 제대로 작동 할 수있는 기회를 원한다면 을 gmpxx.h
앞에 포함해야합니다. 그러나 파일은 모든 것을 번역하지 않습니다. 다음은 (당신이 mpq_class
로 변환하지 않는 한)이 글은 C++ 03을 컴파일 할 수 있습니다 :
#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
을 포함하십시오.
이 문제를 해결하는 데는 두 가지 방법이 있으며 두 가지 방법 모두 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);
두 번째는 완전히 MPF 드롭 만 mpfr 사용하는 것입니다. 그것의 webpage은 6 개의 C++ 래퍼를 나열합니다. 그 중 몇 개는 여전히 유지 관리됩니다.
'x.get_mpf_t()'를 사용 하시겠습니까? 헤더의 순서를 바꿔서는 안됩니까? –
'mpfr_sin (y.get_mpf_t(), x.get_mpf_t(), MPFR_RNDN);을 시도했는데'mpfr_sin과 일치하는 함수 호출이 없습니다 '라는 오류로 실패합니다. 내가 뭔가 잘못하고있는거야 ..? –