C GMP mpf\U添加上的精度丢失。我的手指到哪里去了?

C GMP mpf\U添加上的精度丢失。我的手指到哪里去了?,c,precision,gmp,C,Precision,Gmp,我将两个负浮动相加: char * lhs = "-2234.6016114467412141"; char * rhs = "-4939600281397002.2812"; 根据Perl,使用bignum和Math::BigFloat,答案是 -4939600281399236.8828114467412141 -4939600281399236.88281 然而,根据GMP,使用下面的代码,答案是 -4939600281399236.8828114467412141 -49396

我将两个负浮动相加:

char * lhs = "-2234.6016114467412141";
char * rhs = "-4939600281397002.2812";
根据Perl,使用bignum和Math::BigFloat,答案是

-4939600281399236.8828114467412141
-4939600281399236.88281 
然而,根据GMP,使用下面的代码,答案是

-4939600281399236.8828114467412141
-4939600281399236.88281 
我哪里出错了?剩下的“14467412141”怎么了


另外,我曾尝试使用大于64(默认值)的值向
mpf\u set\u default\u prec
添加调用,但没有效果

看起来您在64位溢出尾数。尝试执行
mpf\u get\u prec(f\u res)
检查它是否达到您想要的精度。如果没有,请在初始化任何mpf变量(main的第1行)之前调用
mpf\u set\u default\u prec()

使用较大的值引导。试试这个:

mpf_set_default_prec(5*1024)

完全正确我将宏更改为#define F(x)mpf_t(x);强积金初始值2((x),128L);一切都很顺利。