我正在使用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
需要多大。有没有更好的方法来进行这种转换?
答案 0 :(得分:6)
如何使用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);
答案 1 :(得分:2)
sprintf
的名声不好我很惊讶他们甚至包括了类似的功能。
mpz_sizeinbase
可用于计算保持整数的基数10表示所需的空间。而另一个回答的人是正确的,mpf_set_z
比将整数转换为基数为10的字符串并将其读回浮点数要好得多。