MPIR 的浮点类型不准确吗?

is MPIR's floating point type inaccurate?

我刚开始使用 MPIR,我正在执行这段代码:

mpf_t t2;
mpf_init2(t2, 10000);
mpf_set_d(t2, 5.999999999999);
gmp_printf("fixed point mpf %.40Ff", t2);

输出为:

fixed point mpf 5.9999999999989999110994176589883863925934

虽然我已将精度设置为 10000,但这似乎非常不准确。我做错了什么吗?

5.999999999999 是一个 double。现在,double 实际上不能保存值 5.999999999999,但它可以保存值 5.9999999999989999110994176589883863925934,这几乎完全相同 - 你永远不会注意到差异,对吗?

改用mpf_set_str

mpf_set_str(t2, "5.999999999999", 10);

(10 是基数,在本例中为十进制)