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 是基数,在本例中为十进制)
我刚开始使用 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 是基数,在本例中为十进制)