首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPFR取整为0.9999到1?

MPFR取整为0.9999到1?
EN

Stack Overflow用户
提问于 2010-05-08 13:45:28
回答 1查看 721关注 0票数 2

我尝试使用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":

代码语言:javascript
复制
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;
}

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-08 13:59:15

精度是given in bits,而不是您似乎假设的十进制数字。似乎可以将正确的值重新打印为4位十进制数,精度为15位。此外,您还可以使用mpfr_printf直接输出。

如果您确实需要使用mpfr_get_str,我将传递null作为第一个参数。如果这样做,则会为您分配字符串。然后,为了释放它,你调用mpfr_free_str。

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2793078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档