2010-01-24 52 views
3

我使用的是GMP,我希望能够快速将mpz转换为mpf。我翻遍了图书馆,找不到多少东西。我能想到的最好的事情是这样的: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的限制,我无法预先确定需要的大小。有没有更好的方法来做这种转换?

回答

5

怎么样使用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

哇,鉴于sprintf坏名声我很惊讶,他们甚至包括像它的功能。

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