Desarrollador(es) | Proyecto GNU |
---|---|
Lanzamiento inicial | 1991 ( 1991 ) | [1]
Versión estable | 6.3.0 [2] / 30 de julio de 2023 |
Repositorio | gmplib.org/repo/ |
Escrito en | C , ( C++ , ensamblaje opcional) |
Tipo | Software matemático |
Licencia | Doble licencia LGPLv3 y GPLv2 [3] |
Sitio web | gmplib.org |
GNU Multiple Precision Arithmetic Library ( GMP ) es una biblioteca libre para aritmética de precisión arbitraria , que opera con números enteros con signo , números racionales y números de punto flotante . [3] No hay límites prácticos para la precisión excepto los implícitos por la memoria disponible (los operandos pueden ser de hasta 2 32 −1 bits en máquinas de 32 bits y 2 37 bits en máquinas de 64 bits). [4] [5] GMP tiene un rico conjunto de funciones, y las funciones tienen una interfaz regular. La interfaz básica es para C , pero existen envoltorios para otros lenguajes, incluyendo Ada , C++ , C# , Julia , .NET , OCaml , Perl , PHP , Python , R , Ruby y Rust . Antes de 2008, Kaffe , una máquina virtual Java , usaba GMP para soportar la aritmética de precisión arbitraria incorporada en Java. [6] Poco después, se agregó soporte GMP a GNU Classpath . [7]
Las principales aplicaciones objetivo del GMP son aplicaciones e investigación de criptografía , aplicaciones de seguridad de Internet y sistemas de álgebra computacional .
GMP tiene como objetivo ser más rápida que cualquier otra biblioteca bignum para todos los tamaños de operandos. Algunos factores importantes para lograrlo son:
La primera versión de GMP se realizó en 1991 y se encuentra en constante desarrollo y mantenimiento. [8]
GMP es parte del proyecto GNU (aunque el hecho de que su sitio web esté fuera de gnu.org puede causar confusión) y se distribuye bajo la Licencia Pública General Reducida de GNU (LGPL).
GMP se utiliza para aritmética de números enteros en muchos sistemas de álgebra computacional como Mathematica [9] y Maple . [10] También se utiliza en la Biblioteca de Algoritmos de Geometría Computacional (CGAL).
Se necesita GMP para construir la Colección de compiladores GNU (GCC). [11]
A continuación se muestra un ejemplo de código C que muestra el uso de la biblioteca GMP para multiplicar e imprimir números grandes:
#incluir <stdio.h> #incluir <gmp.h> int main ( void ) { mpz_t x , y , resultado ; mpz_init_set_str ( x , "7612058254738945" , 10 ); mpz_init_set_str ( y , "9263591128439081" , 10 ); mpz_init ( resultado ); mpz_mul ( resultado , x , y ); gmp_printf ( " %Zd \n " "* \n " " %Zd \n " "-------------------- \n " "%Zd \n " , x , y , resultado ); /* libera memoria utilizada */ mpz_clear ( x ); mpz_clear ( y ); mpz_clear ( resultado ); devuelve 0 ; }
Este código calcula el valor de 7612058254738945 × 9263591128439081.
Al compilar y ejecutar este programa se obtiene el siguiente resultado. (El -lgmp
indicador se utiliza si se compila en sistemas de tipo Unix).
7612058254738945* 9263591128439081--------------------70514995317761165008628990709545
A modo de comparación, se puede escribir el siguiente programa equivalente en C++ (los -lgmpxx -lgmp
indicadores se utilizan si se compila en sistemas de tipo Unix).
#include <iostream> #include <gmpxx.h> int principal () { clase mpz x ( "7612058254738945" ); clase mpz y ( "9263591128439081" ); std :: cout << " " << x << " \n " << "* \n " << " " << y << " \n " << "---------- ---------- \n " << x * y << " \n " ; devuelve 0 ; }
Nombre de la biblioteca | Idioma | Licencia |
---|---|---|
Biblioteca de precisión múltiple GNU | C , C++ | Licencia LGPL |
Matemáticas::GMP | Perl | Licencia LGPL |
Math::GMPz, Math::GMPf y Math::GMPq | Perl | Licencia artística v1.0 + GPL v1.0 o posterior |
Proyecto Python de multiprecisión general | Pitón | Licencia LGPL |
Paquete R 'gmp' | R | Licencia pública general (GPL) |
El proyecto RubyGems | Rubí | Apache 2.0 |
Enlaces FFI de Rust para GMP, MPFR y MPC | Óxido | Licencia LGPL |
Biblioteca GNU Multi-Precision para PHP | PHP | PHP |
Rutinas de precisión múltiple GNU para SBCL | Ceceo común | Dominio público |
Capítulo BPM | C | Propiedad |
Envoltorio GMP paralelo para BMDFM | BMDFM LISP/C | Dominio público |
Compilador Glasgow Haskell (su implementación Integer es básicamente un enlace a GMP) | Haskell | BSD |
luajit-gmp | LuaJIT | Instituto Tecnológico de Massachusetts (MIT) |
contenedor gmp para delphi | Delfos | Instituto Tecnológico de Massachusetts (MIT) |
Zarith | OCaml | Licencia LGPL |
Biblioteca nativa Math.Gmp | .NETO | Instituto Tecnológico de Massachusetts (MIT) |
nim-gmp | Nim | Instituto Tecnológico de Massachusetts (MIT) |
Gobierno de Japón | Java | Licencia LGPL |