GMP快速入门

 

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:

 

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

 

 

程序就完毕了。

 

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

完整的程序如下:

 

 

 

 

 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值