如何在 C 中使用 GMP 库分配浮点值?

How to assign a float value using GMP library in C?

我试图通过编写一个简单的程序将一些浮点数加在一起来学习如何在 C 中使用 GMP 库,但在运行时它抱怨:

GNU MP: Cannot allocate memory (size=140735132293330)
Aborted (core dumped)

代码如下:

#include <gmp.h>
#include <stdio.h>

int main(){
  mpf_set_default_prec(64);

  mpf_t sum;
  mpf_init(sum);
  mpf_set_ui(sum,0);
  unsigned int i = 0;

  while (i < 4) {
    mpf_add_ui(sum,sum,i);
    i++;
  }

  mpf_out_str(stdout,10,sum);
  printf ("\n");
  mpf_clear(sum);
}

我仅使用 GMP mpz 函数就可以毫无问题地执行此操作,但是当我尝试使用浮点数执行此操作时,我被卡住了。该文档并没有真正显示浮点函数的任何真实示例,所以可能我正在错误地初始化或分配值。

您一定没有正确检查编译器警告,但简单的错误是您调用 mpf_out_str 时使用了错误数量的参数,您可以在 the documentation 中查找:

size_t mpf_out_str (FILE *stream, int base, size_t n_digits, const mpf_t op)
//                                          ^^^^^^^^^^^^^^^^

来自 the documentation,

it is a good idea to include stdio.h before gmp.h, since that will allow gmp.h to define prototypes for these functions

这样你会得到一个错误,因为你使用错误数量的参数调用函数。您没有因缺少声明而收到任何警告的原因是因为 mpf_out_str 是一个在 gmp.h 中定义的宏,它在您的计算机上安装在 /usr/include 中,因此被认为是一个系统 header,所以警告被禁用(使用 -Wsystem-headers 来查看)。这感觉像是 gcc 中的错误功能...