4

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

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。有没有更好的方法来进行这种转换?

4

2 回答 2

8

怎么用mpf_set_z (mpf_t rop, mpz_t op)

另外(我假设你已经这样做了)你的 mpz 和 mpf 变量需要用mpf_init(mpf_t x)and初始化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);
于 2010-01-24T00:56:10.690 回答
2

sprintf哇,考虑到我很惊讶他们甚至包括这样的功能的坏名声。

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

于 2010-01-24T02:13:27.597 回答