2010-01-24 59 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的字符串並將其讀回浮點數要好得多。