我刚开始使用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,但这看起来非常真实。我做错了吗?
答案 0 :(得分:4)
5.999999999999
是double
。现在,double
实际上可以保持值5.999999999999,但它可以保持值几乎完全相同的值5.9999999999989999110994176589883863925934 - 并且您从未注意到差异,对吧?
改为使用mpf_set_str
:
mpf_set_str(t2, "5.999999999999", 10);
(10是基数,在这种情况下是十进制)