GMP将mpz转换为mpf

时间:2010-01-24 00:49:29

标签: c gmp

我正在使用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需要多大。有没有更好的方法来进行这种转换?

2 个答案:

答案 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的字符串并将其读回浮点数要好得多。