如果已经有答案,我会提前道歉。
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)
工作正常,但这项任务的准确性很高。
答案 0 :(得分:1)
问题是您应该在%Ff
而不是gmp_printf
(或%lf
)中使用%Lf
格式说明符。例如,如果您想要20位小数,请使用:
gmp_printf("fixed point mpf %.20Ff\n", f);
有关详情,请参阅GMP documentation。
原因是您的f
变量实际上具有mpf_t
类型,这与基本double
或long double
类型不同,因此需要特殊的格式说明符(除此之外,你打电话给gmp_printf
而不是普通的printf
)。