我知道这是一个非常愚蠢的问题,但我希望有人可以提供帮助。
出于精确原因,我不得不使用mpir,所以我必须翻译所有的c代码。基本上我只需要更精确的精确数字。
然而,我真的对用于我的变量的数据类型感到困惑。我理解mpz_t是整数。由于我存储的数字有很多小数位,这显然不合适,因为整数只是整数
mpq_t用于理性。由于我不认为存储的每个值都是有理数,我不明白这是不合适的。
mpf_t用于浮点数。由于这有“精度有限”,我不知道这对我的变量有什么用处,因为我被告知使用mpir的主要原因是为了提高精度。
我只是希望能够以准确的方式表示我的数字,而我使用这个的全部原因是因为我被告知它有助于在真正的大小数字之间进行算术时保持准确性。我应该为mpir使用什么数据类型?我被告知我需要超过四倍的精度。 : - (
我发现自己对整个事情感到困惑,需要一些关于使用什么数据类型以及如何确定精确度的指导。如果可能的话,以非常简单的方式解释。
答案 0 :(得分:1)
来自MPIR 2.6.0 documentation(PDF链接),第7章:
MPIR浮点数存储在mpf_t类型的对象和运行的函数中 他们有一个mpf_前缀。
每个浮点数的尾数具有用户可选择的精度,仅受可用内存的限制。每个变量都有自己的精度,可以随时增加或减少。
看起来它有各种功能来帮助您设置精度,比如mpf_set_default_prec
,mpf_get_prec
和mpf_set_prec
。
您应该使用mpf_t
作为数据类型,并且精度有限,但MPIR的优势在于您可以设置该限制。如果愿意,可以使用128位作为浮点数的尾数。这将是32位浮点数的4倍以上。
从Wikipedia on quadruple-precision floating-point format看起来,四倍精度意味着113位的有效位数/尾数,因此您可能希望使用至少113位精度的MPIR来获得该精确度。
答案 1 :(得分: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.
对该功能的调用是否适合您的需求?