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

时间:2016-10-16 11:47:12

标签: c linux memory numbers gmp

我正在尝试通过编写一个简单的程序来学习如何在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功能来做到这一点,但是当我尝试使用浮点数时,我被卡住了。文档并没有真正显示浮点函数的任何实例,所以可能我正在初始化或错误地赋值。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

来自the documentation

  

在gmp.h之前包含stdio.h是个好主意,因为这将允许gmp.h为这些函数定义原型

这样您就会收到错误,因为您使用错误的参数调用函数。您没有得到任何关于缺少声明的警告的原因是因为mpf_out_str是一个宏,在gmp.h中定义,在您的机器上安装在/ usr / include中,因此被认为是系统头,因此警告被禁用(使用-Wsystem-headers看到它。这感觉就像gcc中的错误......