你好吗?我想在C++上学习使用多精度库GMP。这是我的代码。
#include <iostream>
#include <cstdlib>
#include <gmpxx.h>
using namespace std;
int main(){
mpf_set_default_prec (128);
double a = 2., b = 3.;
mpf_t x, y, z;
mpf_set_d(x, a);
mpf_set_d(y, b);
mpf_div(z, x, y);
gmp_printf("%.*Ff \n", 30, z);
mpf_clear (x);
mpf_clear (y);
mpf_clear (z);
return 0;
}
编译正确,但在执行过程中返回Segment violation('core'生成)。错误在哪里?
mpf_t
是GMP使用的C浮点类型。正如文档中所说,"一个 mpf_t
对象必须在存储第一个值之前被初始化"。所以你应该这样做。
#include <iostream>
#include <cstdlib>
#include <gmpxx.h>
using namespace std;
int main(){
mpf_set_default_prec (128);
double a = 2., b = 3.;
mpf_t x, y, z;
mpf_init(x);
mpf_init(y);
mpf_init(z);
mpf_set_d(x, a);
mpf_set_d(y, b);
mpf_div(z, x, y);
gmp_printf("%.*Ff \n", 30, z);
mpf_clear (x);
mpf_clear (y);
mpf_clear (z);
return 0;
}
但是,如果你使用的是C++,你可以考虑使用... C++接口 的库,这样可以省去init和clear的调用。