我尝试使用mpfr_set_str()函数将值0.9999存储到mpfr_t变量中
但是在存储过程中,无论舍入值是什么(GMP_RNDD,GMP_RNDU,GMP_RNDN,GMP_RNDZ),0.9999都会舍入为1(或其他值!= 0.9999)
那么,使用mpfr_set_str()在mpfr_t变量中存储0.9999的最佳方法是什么?有可能吗?
这是我的测试程序,它输出"buffer is: 1",而不是想要的"buffer is: 0.9999":
int main()
{
size_t precision = 4;
mpfr_t mpfrValue;
mpfr_init2(mpfrValue, precision);
mpfr_set_str(mpfrValue, "0.9999", 10, GMP_RNDN);
char *buffer = (char*)malloc((sizeof(char) * precision) + 3);
mp_exp_t exponent;
mpfr_get_str(buffer,
&exponent,
10,
precision,
mpfrValue,
GMP_RNDN);
printf("buffer is: %s\n", buffer);
free(buffer);
mpfr_clear(mpfrValue);
return 0;
}谢谢你的帮助
发布于 2010-05-08 13:59:15
精度是given in bits,而不是您似乎假设的十进制数字。似乎可以将正确的值重新打印为4位十进制数,精度为15位。此外,您还可以使用mpfr_printf直接输出。
如果您确实需要使用mpfr_get_str,我将传递null作为第一个参数。如果这样做,则会为您分配字符串。然后,为了释放它,你调用mpfr_free_str。
int main()
{
size_t precision = 15;
mpfr_t mpfrValue;
mpfr_init2(mpfrValue, precision);
mpfr_set_str(mpfrValue, "0.9999", 10, GMP_RNDN);
mpfr_printf("Value is: %Rf\n", mpfrValue);
mpfr_clear(mpfrValue);
return 0;
}https://stackoverflow.com/questions/2793078
复制相似问题