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

但是,在存储期间,0.9999在存储期间舍入1(或其他值!= 0.9999)(GMP_RNDD,gmp_rndd,gmp_rndu,gmp_rndn,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;
}

谢谢您的帮助

有帮助吗?

解决方案

精度是 给出, ,不像您所假设的那样,不是十进制数字。似乎您可以以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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top