mpf_set_str从非零字符串(GMP)分配0

时间:2014-02-25 19:29:55

标签: c string gmp

如果已经有答案,我会提前道歉。

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 个答案:

答案 0 :(得分:1)

问题是您应该在%Ff而不是gmp_printf(或%lf)中使用%Lf格式说明符。例如,如果您想要20位小数,请使用:

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

有关详情,请参阅GMP documentation

原因是您的f变量实际上具有mpf_t类型,这与基本doublelong double类型不同,因此需要特殊的格式说明符(除此之外,你打电话给gmp_printf而不是普通的printf)。

相关问题