我知道这是个很愚蠢的问题,但我希望有人能帮上忙。
出于精度的原因,我不得不使用mpir,所以我必须为它翻译我所有的c代码。基本上,我只需要更多有意义的精确数字。
然而,我真的对变量使用的数据类型感到困惑。我知道mpz_t是用来表示整数的。由于我存储的数字有很多小数位,这显然是不合适的,因为整数只是整数
mpq_t代表有理数。因为我不认为每个存储的值都是有理数,所以我不认为这是合适的。
mpf_t用于浮点数。由于这有“有限的精度”,我看不出这对我的变量有什么用处,因为我被告知使用mpir的主要原因是为了提高精度。
我只是希望能够以一种准确的方式表示我的数字,我之所以使用它,是因为我被告知,在进行真正的大数字和小数字之间的算术时,它将有助于保持准确性。我应该为mpir使用什么数据类型?我被告知我需要比四倍精度更高的精度。:-(
我只是发现自己被整个事情搞糊涂了,需要一些关于使用什么数据类型和如何确定精度级别的指导。如果可能的话,以一种非常简单的方式解释。
发布于 2013-03-20 01:19:10
从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位的精度来获得该级别的精度。
发布于 2013-03-20 01:14:14
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.对该函数的调用能满足您的需要吗?
https://stackoverflow.com/questions/15505993
复制相似问题