GNU多重精度运算库 技术专题简介-编程知识网

简介

GNU Multiple Precision Arithmetic Library开发者GNU计划首次发布1991年 (1991)当前版本6.2.1 (2020年11月14日;稳定版本) 源代码库gmplib.org/repo/ 编程语言C语言操作系统跨平台类型数学软件许可协议LGPL网站gmplib.orgGNU多重精度运算库(英语:GNU Multiple Precision Arithmetic Library,简称GMP或gmpal)是一个开源的任意精度运算库,支持正负数的整数、有理数、浮点数。它没有任何精度限制,只受限于可用内存。GMP有很多函数,它们都有一个规则的接口。它是C语言写成的,但用为其他很多语言做包装,包括Ada,C++,C#,OCaml,Perl,PHP,python 和 R。GMP主要运用于加密应用和研究、互联网安全应用、计算机代数系统和计算代数研究。GMP的目标是成为最快的大数运算库,GMP是GNU项目的一部分,它在GNU宽通用公共许可证下发表。GMP在许多计算机辅助代数系统中用于整数运算,如Mathematica和Maple。GMP需要使用GCC(GNU编译器套装)编译。

示例

这是一个C语言示例,它展示了如何使用GMP做乘法运算并输出。

#include #include #include int main(void){ mpz_t x; mpz_t y; mpz_t result; mpz_init(x); mpz_init(y); mpz_init(result); mpz_set_str(x, "7612058254738945", 10); mpz_set_str(y, "9263591128439081", 10); mpz_mul(result, x, y); gmp_printf("\n    %Zd\n*\n    %Zd\n--------------------\n%Zd\n\n", x, y, result); /* free used memory释放内存*/  mpz_clear(x); mpz_clear(y); mpz_clear(result); return EXIT_SUCCESS;}

这段代码计算7612058254738945和9263591128439081的乘积。

编译运行,获得这样的输出:(在UNIX类系统上,需要 -lgmp)

    7612058254738945*    9263591128439081--------------------70514995317761165008628990709545

我们可以使用C++完成相同的运算。(如果在类Unix系统下编译,需要使用 -lgmpxx -lgmp)

#include #include int main(){  mpz_class x("7612058254738945");  mpz_class y("9263591128439081");  std::cout << "\n    " << x << "\n*\n    " << y;  std::cout << "\n--------------------\n" << x * y << "\n\n";}

语言支持

Library name 语言 许可证

GNU Multi-Precision Library (页面存档备份,存于互联网档案馆)C, C++LGPLMath::GMP (页面存档备份,存于互联网档案馆)PerlGNU Multi-Precision Library for .NETC#, .NETLGPLGeneral Multiprecision Python Project (页面存档备份,存于互联网档案馆)PythonThe RubyGems project (页面存档备份,存于互联网档案馆)RubyGNU Multi-Precision Library for PHP (页面存档备份,存于互联网档案馆)PHPPHPGNU Multi-Precision Routines for SBCL (页面存档备份,存于互联网档案馆)Common LispCh GMP(页面存档备份,存于互联网档案馆)Ch (计算机语言)(英语:Ch_(computer_programming))Glasgow Haskell Compiler
(The implementation of Integer
is basically a binding to GMP)
HaskellBSD

参考资料

^ The GNU Multiple Precision Arithmetic Library. . (原始内容存档于2021-01-28). 

^ 2.0 2.1 “GMP 6.2.1 released”; 作者姓名字符串: Marco Bodrato; 作品或名称的语言: 英语; 出版日期: 2020年11月14日; 检索日期: 2020年11月15日.