Biblioteca aritmética de precisión múltiple GNU

Software libre
Biblioteca aritmética de precisión múltiple GNU
Desarrollador(es)Proyecto GNU
Lanzamiento inicial1991 ; hace 33 años [1] ( 1991 )
Versión estable
6.3.0 [2]  / 30 de julio de 2023
Repositoriogmplib.org/repo/
Escrito enC , ( C++ , ensamblaje opcional)
TipoSoftware matemático
LicenciaDoble licencia LGPLv3 y GPLv2 [3]
Sitio webgmplib.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]

Ejemplos

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 -lgmpindicador 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 -lgmpindicadores 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 ; } 

Enlaces de idioma

Nombre de la bibliotecaIdiomaLicencia
Biblioteca de precisión múltiple GNUC , C++Licencia LGPL
Matemáticas::GMPPerlLicencia LGPL
Math::GMPz, Math::GMPf y Math::GMPqPerlLicencia artística v1.0 + GPL v1.0 o posterior
Proyecto Python de multiprecisión generalPitónLicencia LGPL
Paquete R 'gmp'RLicencia pública general (GPL)
El proyecto RubyGemsRubíApache 2.0
Enlaces FFI de Rust para GMP, MPFR y MPCÓxidoLicencia LGPL
Biblioteca GNU Multi-Precision para PHPPHPPHP
Rutinas de precisión múltiple GNU para SBCLCeceo comúnDominio público
Capítulo BPMCPropiedad
Envoltorio GMP paralelo para BMDFMBMDFM LISP/CDominio público
Compilador Glasgow Haskell
(su implementación Integer
es básicamente un enlace a GMP)
HaskellBSD
luajit-gmpLuaJITInstituto Tecnológico de Massachusetts (MIT)
contenedor gmp para delphiDelfosInstituto Tecnológico de Massachusetts (MIT)
ZarithOCamlLicencia LGPL
Biblioteca nativa Math.Gmp.NETOInstituto Tecnológico de Massachusetts (MIT)
nim-gmpNimInstituto Tecnológico de Massachusetts (MIT)
Gobierno de JapónJavaLicencia LGPL

Véase también

  • GNU MPFR : una biblioteca para cálculos de precisión arbitraria con redondeo correcto, basada en GNU MP
  • CLN : una biblioteca de clases para precisión arbitraria
  • MPIR – una bifurcación de GMP, que ya no recibe mantenimiento

Referencias

  1. ^ "Archivo GNU MP" . Consultado el 3 de diciembre de 2018 .
  2. ^ Torbjörn Granlund (30 de julio de 2023). "Lanzamiento de GMP 6.3.0" . Consultado el 30 de julio de 2023 .
  3. ^ ab "¿Qué es GMP?" . Consultado el 7 de abril de 2014 .
  4. ^ Granlund, Torbjorn (6 de julio de 2009). "Problemas con mpz_set_str y cadenas enormes" . Consultado el 17 de marzo de 2013 .
  5. ^ "Noticias GMP 6.0" . Consultado el 4 de octubre de 2019 .
  6. ^ Hughes, Andrew John (28 de febrero de 2008). "¿Se eliminaron las matemáticas de GMP?" . Consultado el 17 de marzo de 2013 .
  7. ^ "GNU Classpath 0.98 "Más vale tarde que nunca"". 2009-02-05 . Consultado el 2013-03-17 .
  8. ^ "Biblioteca GNU MP Bignum" . Consultado el 3 de diciembre de 2018 .
  9. ^ "El núcleo de Mathematica: problemas en el diseño y la implementación". Octubre de 2006. Consultado el 17 de marzo de 2013 .
  10. ^ "La biblioteca GNU Multiple Precision (GMP)". Maplesoft . Consultado el 17 de marzo de 2013 .
  11. ^ GCC utiliza la biblioteca GNU MPFR , que a su vez se basa en GMP. "GCC 4.3 Release Series: Changes, New Features, and Fixes". 2012-11-02 . Consultado el 2013-03-17 .
  • Sitio web oficial
Obtenido de "https://es.wikipedia.org/w/index.php?title=Biblioteca_de_aritmética_de_precisión_múltiple_de_GNU&oldid=1236340397"