我正在使用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需要多大。有没有更好的方法来完成这个转换?
发布于 2010-01-24 08:56:11
使用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);发布于 2010-01-24 10:13:28
哇,考虑到sprintf的坏名声,我很惊讶他们甚至包括了一个类似的函数。
mpz_sizeinbase可以用来计算需要多少空间来容纳整数的基数为10的表示。另一个回答是正确的,mpf_set_z是一种比将整数转换为基数10的字符串并将其读回浮点数的方法要好得多。
https://stackoverflow.com/questions/2125410
复制相似问题