代码之家  ›  专栏  ›  技术社区  ›  Michael Dickens

gmp将mpz转换为mpf

gmp c
  •  3
  • Michael Dickens  · 技术社区  · 15 年前

    我正在使用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 我看不出有多大 尺寸 必须这样。有没有更好的方法来做这个转换?

    2 回复  |  直到 15 年前
        1
  •  6
  •   user257111    15 年前

    使用呢 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
  •  2
  •   Omnifarious    15 年前

    哇,考虑到 sprintf 我很惊讶他们竟然包含了这样的功能。

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