2013-03-19 59 views
1

我知道这是一个非常愚蠢的问题,但我希望有人可以提供帮助。真的基本mpir问题

我被迫使用MPIR出于精度原因,所以我必须翻译我的所有C代码。基本上我只需要更高精度的数字。然而,我真的很困惑我的变量使用的数据类型。我明白mpz_t是整数。由于我存储的数字有很多小数位,这显然是不合适的,因为整数只是整数

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

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

我只是想能够以准确的方式表示我的数字,而我使用这个数据的全部原因是因为我被告知在真正的大数和小数之间进行算术时,会有助于保持准确性。我应该为mpir使用哪种数据类型?我被告知我需要超过四倍的精度。 :-(

我只是觉得自己被整个事情混淆,需要什么数据类型提供一些指导使用以及如何确定的精度水平。在可能的话一个非常简单的方法来解释。

回答

1

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

MPIR浮点数存储在上 操作它们具有mpf_前缀类型mpf_t的对象和功能。

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

它看起来像它具有多种功能,以帮助您设置精度,位数,如mpf_set_default_precmpf_get_prec,并mpf_set_prec

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

根据Wikipedia on quadruple-precision floating-point format,看起来四倍精度意味着113位的有效位数/尾数,所以您可能希望使用MPIR至少113位的精度来获得该​​精确度。

+0

非常感谢您清理所有问题我会试一试 – user2187443 2013-03-19 17:33:47

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. 

对该功能的调用是否适合您的需求?