gpt4 book ai didi

gmp - MPFR:得到 mpf_class 的罪孽

转载 作者:行者123 更新时间:2023-12-02 01:43:41 25 4
gpt4 key购买 nike

我在我的环境中安装了 gmp 和 mpfr。现在我可以成功

#include <gmpxx.h>
#include <mpfr.h>
#include <mpf2mpfr.h>

现在,假设我用某个值初始化了一个 mpf_class:
mpf_class x = 0.73;

我怎样才能使用 mpfr 来得到这个数字的罪?我只需要一个 mpf_class 输入,一个 mpf_class 输出。就像是:
mpf_class y = sin(x)

这显然不起作用。我注意到有一个 mpfr_sin 函数,我是这样调用的:
mpfr_sin(x, y, MPFR_RNDN);

但这并不奏效。那我该怎么办?难道我做错了什么?

谢谢

最佳答案

mpf2mpfr.h可能不是你想要的。它包含大量 #define在接下来的所有内容中用 mpf 名称替换 mpf 名称。如果您希望有机会在您的案例中使用它,则必须包含 mpf2mpfr.h之前 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 .

主要有两种方法可以解决这个问题,并且都从删除 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++ 包装器,其中几个仍在维护。

关于gmp - MPFR:得到 mpf_class 的罪孽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com