我正在尝试通过编写一个简单的程序来学习如何在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功能来做到这一点,但是当我尝试使用浮点数时,我被卡住了。文档并没有真正显示浮点函数的任何实例,所以可能我正在初始化或错误地赋值。
答案 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)
在gmp.h之前包含stdio.h是个好主意,因为这将允许gmp.h为这些函数定义原型
这样您就会收到错误,因为您使用错误的参数调用函数。您没有得到任何关于缺少声明的警告的原因是因为mpf_out_str是一个宏,在gmp.h中定义,在您的机器上安装在/ usr / include中,因此被认为是系统头,因此警告被禁用(使用-Wsystem-headers
看到它。这感觉就像gcc中的错误......