我知道这是一个非常愚蠢的问题,但我希望有人能提供帮助。
出于精确原因,我不得不使用 mpir,所以我必须为它翻译我所有的 C 代码。基本上我只需要更重要的精度数字。
但是,我真的对用于我的变量的数据类型感到困惑。我知道 mpz_t 是整数。因为我存储的数字有很多小数位,所以这显然不合适,因为整数只是整数
mpq_t 用于有理数。因为我不认为存储的每个值都是有理数,所以我不明白这有什么合适的。
mpf_t 用于 float 。由于这具有“有限精度”,我看不出这对我的变量有何用处,因为我被告知使用 mpir 的主要原因是为了提高精度。
我只是希望能够以准确的方式表示我的数字,而我使用它的全部原因是因为有人告诉我,在对非常大的数字和非常小的数字进行算术运算时,它有助于保持准确性。我应该为 mpir 使用什么数据类型?有人告诉我我需要比四倍精度更高的精度。 :-(
我只是发现自己对整个事情感到困惑,需要一些关于使用什么数据类型以及如何确定精度级别的指导。如果可能,以非常简单的方式进行解释。
最佳答案
来自MPIR 2.6.0 documentation (PDF 链接),第 7 章:
MPIR floating point numbers are stored in objects of type mpf_t and functions operating on them have an mpf_ prefix.
The mantissa of each float has a user-selectable precision, limited only by available memory. Each variable has its own precision, and that can be increased or decreased at any time.
看起来它有各种函数可以帮助您设置精度,以位为单位,例如 mpf_set_default_prec
、mpf_get_prec
和 mpf_set_prec
。
您应该使用mpf_t
作为数据类型,它的精度是有限的,但是MPIR 的优点是您可以设置该限制是什么。如果愿意,您可以使用 128 位作为 float 的尾数。这将是 32 位 float 的 4 倍以上。
来自Wikipedia on quadruple-precision floating-point format ,看起来四倍精度意味着 113 位的尾数/尾数,因此您可能希望将至少 113 位精度与 MPIR 一起使用以获得该精度级别。
关于c - 真正基本的 mpir 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505993/