gpt4 book ai didi

c - MPFR 将 0.9999 舍入到 1?

转载 作者:行者123 更新时间:2023-12-04 06:53:28 24 4
gpt4 key购买 nike

我正在尝试使用 mpfr_set_str() 函数将值 0.9999 存储到 mpfr_t 变量中

但是 0.9999 在存储过程中四舍五入为 1(或其他值!= 0.9999),无论舍入值(GMP_RNDD、GMP_RNDU、GMP_RNDN、GMP_RNDZ)如何

那么使用 mpfr_set_str() 将 0.9999 存储在 mpfr_t 变量中的最佳方法是什么?
是否可以?

这是我的测试程序,它打印“缓冲区是:1”,而不是想要的“缓冲区是: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;
}

谢谢您的帮助

最佳答案

精度是 given in bits ,而不是十进制数字,正如您所假设的那样。似乎您可以将正确的值以 15 位精度重新打印为 4 个十进制数字。此外,您可以使用 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;
}

关于c - MPFR 将 0.9999 舍入到 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com