现在的位置: 首页 > 综合 > 正文

GMP快速入门

2013年10月09日 ⁄ 综合 ⁄ 共 1351字 ⁄ 字号 评论关闭

 

GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高精度的大整数,浮点数的运算的算术库,几乎没有什么精度方面的限制,功能丰富。

要使用GMP首先从http://gmplib.org/下载源码包,解压缩后编译安装:

 

 

下面我们以求10000!为例说明如何使用gmp。

要使用gmp必须先包含gmp的头文件:

 

求10000!我们需要的数据类型是整数,当然需要的是多精度整数,定义一个多精度整数(multiple precision integer)变量可以用:

 

现在我们需要定义三个变量:

 

 

分别用来迭代1..10000之间的数字、保存结果、保存1这个数字以使得z_i自增。

可以用字符串来给多精度数字初始化为一个大数:

 

 

mpz_init_set_str的原型是:

int mpz_init_set_str (mpz_t rop, char *str, int base)

 

这三个参数分别是多精度整数变量,字符串,进制。

 

 

现在我们循环10000次并进行乘法和加法,乘法和加法的函数分别是mpz_mul,mpz_add,原型分别是:

void mpz_add (mpz_t rop, mpz t op1, mpz t op2)

效果为:rop = op1 + op2

void mpz_mul (mpz_t rop, mpz t op1, mpz t op2)

效果为:rop = op1 * op2

我们的程序可以写为:



然后我们按大整数的格式来输出结果,因为是mpz_t类型,不能用一般的printf,只能用gmp_printf:

 

最后我们释放这几个大整数所占的空间:

 

 

程序就完毕了。

 

运算结果非常大,显示了几页但是速度却非常快,几乎是一秒不到就做完了还包括了在控制台打印时间。

完整的程序如下:

 

 

 

 

 

抱歉!评论已关闭.