Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C中的GMP库指定浮点值?_C_Linux_Memory_Numbers_Gmp - Fatal编程技术网

如何使用C中的GMP库指定浮点值?

如何使用C中的GMP库指定浮点值?,c,linux,memory,numbers,gmp,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);

我试图通过编写一个简单的程序将一些浮点数相加来学习如何在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);
}
#包括
#包括
int main(){
强积金(设定)(预设)(64);;
强积金总额;
强积金首期(总和);
强积金集合(总和,0);;
无符号整数i=0;
而(i<4){
强积金附加费(总和,总和,i);
i++;
}
强积金计划(标准金额,10元,总和);;
printf(“\n”);
强积金结算(总和);
}

我能够做到这一点,只是GMP的mpz功能没有问题,但当我尝试这与浮动我卡住了。文档中没有真正显示任何浮点函数的实际示例,因此可能是我初始化或赋值不正确。

您一定没有正确检查编译器警告,但简单的错误是您调用的
mpf\u out\u str
参数数量错误,您可以在以下内容中查找:


您一定没有正确检查编译器警告,但简单的错误是调用的
mpf\u out\u str
参数数量错误,您可以在以下内容中查找:

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

这样会出现错误,因为您使用错误的参数数调用函数。您没有收到任何声明缺失警告的原因是,mpf_out_str是一个宏,在gmp.h中定义,在您的机器上安装在/usr/include中,因此被视为系统标题,因此警告被禁用(使用
-Wsystem headers
查看)。这感觉像是gcc中的一个错误功能…

来自

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


这样会出现错误,因为您使用错误的参数数调用函数。您没有收到任何声明缺失警告的原因是,mpf_out_str是一个宏,在gmp.h中定义,在您的机器上安装在/usr/include中,因此被视为系统标题,因此警告被禁用(使用
-Wsystem headers
查看)。这感觉像是gcc中的一个错误功能…

始终在严格的标准一致性模式下使用编译器,并启用所有可用的警告。在解决所有警告之前,不要发布堆栈溢出。99%的编程问题可以通过现有工具完全自动诊断。请始终在严格的标准一致性模式下使用编译器,并启用所有可用的警告。在解决所有警告之前,不要发布堆栈溢出。99%的编程问题可以通过现有的工具完全自动诊断。谢谢,不知为什么我错过了。谢谢,不知为什么我错过了。
size_t mpf_out_str (FILE *stream, int base, size_t n_digits, const mpf_t op)
//                                          ^^^^^^^^^^^^^^^^