首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >真正基本的mpir问题

真正基本的mpir问题
EN

Stack Overflow用户
提问于 2013-03-20 01:06:19
回答 2查看 368关注 0票数 1

我知道这是个很愚蠢的问题,但我希望有人能帮上忙。

出于精度的原因,我不得不使用mpir,所以我必须为它翻译我所有的c代码。基本上,我只需要更多有意义的精确数字。

然而,我真的对变量使用的数据类型感到困惑。我知道mpz_t是用来表示整数的。由于我存储的数字有很多小数位,这显然是不合适的,因为整数只是整数

mpq_t代表有理数。因为我不认为每个存储的值都是有理数,所以我不认为这是合适的。

mpf_t用于浮点数。由于这有“有限的精度”,我看不出这对我的变量有什么用处,因为我被告知使用mpir的主要原因是为了提高精度。

我只是希望能够以一种准确的方式表示我的数字,我之所以使用它,是因为我被告知,在进行真正的大数字和小数字之间的算术时,它将有助于保持准确性。我应该为mpir使用什么数据类型?我被告知我需要比四倍精度更高的精度。:-(

我只是发现自己被整个事情搞糊涂了,需要一些关于使用什么数据类型和如何确定精度级别的指导。如果可能的话,以一种非常简单的方式解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-20 01:19:10

MPIR 2.6.0 documentation (PDF链接),第7章:

MPIR浮点数存储在mpf_t类型的对象中,对其进行操作的函数具有mpf_前缀。

每个浮点数的尾数都有一个用户可选的精度,仅受可用内存的限制。每个变量都有自己的精度,可以随时增加或减少。

它看起来像是有各种功能来帮助您设置精度,以位为单位,如mpf_set_default_precmpf_get_precmpf_set_prec

您应该使用mpf_t作为数据类型,它的精度是有限的,但是MPIR的优点是您可以设置该限制是什么。如果你愿意,你可以使用128位作为浮点数的尾数。这将是32位浮点数的4倍以上的精度。

Wikipedia on quadruple-precision floating-point format上看,四倍精度意味着113位的有效位/尾数,因此您可能希望使用至少113位的精度来获得该级别的精度。

票数 1
EN

Stack Overflow用户

发布于 2013-03-20 01:14:14

http://www.mpir.org/mpir-2.6.0.pdf

文档的第48页指出,每个浮点变量的用户可选精度仅受可用内存的限制。

他们还写道:

代码语言:javascript
复制
void mpf_set_prec (mpf_t rop, mp_bitcnt_t prec) [Function]

    Set the precision of rop to be at least prec bits. The value in 
    rop will be truncated to the new precision. This function requires 
    a call to realloc, and so should not be used in a tight loop.

对该函数的调用能满足您的需要吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15505993

复制
相关文章

相似问题

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