2014-02-25 16 views
1

如果已經有答案,我很抱歉。上述mpf_set_str從非零字符串(GMP)分配0

mpf_t f; 
mpf_init2(f, 64); 
printf("input %d\n", mpf_set_str(f, "0.0415373652931074065807663354", 10)); 
gmp_printf ("fixed point mpf %lf\n", f); 

的代碼創建打印出這樣的:

input 0 
fixed point mpf 0.000000 

mpf_set_str返回0所以它是成功的。但是當輸入字符串顯然不是0時,爲什麼它將0賦給變量f?我嘗試不同的東西,如使用字符串變量等

其他功能如

mpf_set_d(f, 0.0415373652931074065807663354) 

工作正常,但很多的精度很多與此分配。

回答

1

問題是,您應該在gmp_printf而不是%lf(或%Lf)內使用%Ff格式說明符。例如,如果你想要20的小數位數,然後使用:

gmp_printf("fixed point mpf %.20Ff\n", f); 

更多參考見GMP documentation

這樣做的原因是,你的f變量實際上有mpf_t類型,這是不同的,基礎doublelong double類型,因此它需要特殊的格式說明(除了您致電gmp_printf代替普通printf)。