【问题标题】:GMP convert mpz to mpfGMP 将 mpz 转换为 mpf
【发布时间】:2011-01-08 16:26:39
【问题描述】:

我正在使用 GMP,我希望能够快速将 mpz 转换为 mpf。我翻遍了图书馆,找不到太多东西。我能想到的最好的事情是:

mpz_t x;
/* Insert code here that assigns some value to x */
char buf[SIZE];
gmp_sprintf(buf, "%Zd", x);
mpf_t y;
mpf_set_str(y, buf);

此解决方案需要重复与字符串之间的转换。此外,它受到SIZE 的限制,我看不出有办法预先确定SIZE 需要多大。有没有更好的方法来进行这种转换?

【问题讨论】:

    标签: c gmp


    【解决方案1】:

    使用mpf_set_z (mpf_t rop, mpz_t op) 怎么样?

    另外(我假设您已经这样做了)您的 mpz 和 mpf 变量将需要使用 mpf_init(mpf_t x)mpz_init(mpz_t x) 进行初始化。

    所以你会这样做:

    mpz_t x;
    mpz_init(x);
    /* Insert code here that assigns some value to x */
    mpf_t y;
    mpf_init(y);
    mpf_set_z(y,x);
    

    【讨论】:

      【解决方案2】:

      哇,考虑到 sprintf 的坏名声,我很惊讶他们甚至包含类似的功能。

      mpz_sizeinbase 可用于计算您需要多少空间来保存以 10 为基数的整数表示。另一个回答的人是正确的,mpf_set_z 比将整数转换为以 10 为底的字符串并将其读回浮点数要好得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多