1

我知道这是一个非常愚蠢的问题,但我希望有人能提供帮助。

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

但是,我对用于变量的数据类型感到非常困惑。我了解 mpz_t 用于整数。由于我存储的数字有很多小数位,这显然不合适,因为整数只是整数

mpq_t 用于有理数。因为我不认为存储的每个值都是有理数,所以我看不出这有多合适。

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

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

我只是发现自己对整个事情感到困惑,需要一些关于使用什么数据类型以及如何确定精度级别的指导。如果可能,以非常简单的方式进行解释。

4

2 回答 2

1

来自MPIR 2.6.0 文档(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 位的有效数/尾数,因此您可能希望使用 MPIR 的至少 113 位精度来获得该​​精度水平。

于 2013-03-19T17:19:10.177 回答
0

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

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

他们还写道:

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.

调用该函数是否适合您的需求?

于 2013-03-19T17:14:13.717 回答