GNU Çok Duyarlı Aritmetik Kitaplığı - GNU Multiple Precision Arithmetic Library

GNU Çok Duyarlı Aritmetik Kitaplığı
GMPLogo.svg
Geliştirici (ler)GNU Projesi
İlk sürüm1991; 29 yıl önce (1991)[1]
Kararlı sürüm6.2.1 (14 Kasım 2020; 25 gün önce (2020-11-14)[2]) [±]
Depogmplib.org/ repo/
YazılmışC, (C ++, montaj isteğe bağlı olarak)
TürMatematiksel yazılım
LisansÇift LGPLv3 ve GPLv2[3]
İnternet sitesigmplib.org

GNU Çok Duyarlı Aritmetik Kitaplığı (GMP) bir Bedava kütüphane için keyfi kesinlikte aritmetik, imzalı olarak çalışıyor tamsayılar, rasyonel sayılar, ve kayan nokta sayılar.[3] Mevcut olanların ima ettikleri dışında kesinliğin pratik bir sınırı yoktur. hafıza (işlenenler en fazla 2 olabilir3232 bit makinelerde −1 bit ve 237 64 bit makinelerde bitler).[4][5] GMP, zengin bir işlev kümesine sahiptir ve işlevlerin düzenli bir arabirimi vardır. Temel arayüz C ancak diğer diller için sarmalayıcılar var Ada, C ++, C #, Julia, .AĞ, OCaml, Perl, PHP, Python, R, Yakut ve Wolfram Dili. 2008'den önce, Kaffe, bir Java sanal makinesi, Java yerleşik keyfi hassas aritmetiğini desteklemek için GMP kullandı.[6] Kısa bir süre sonra GMP desteği eklendi GNU Sınıfyolu.[7]

GMP'nin ana hedef uygulamaları kriptografi uygulamalar ve araştırmalar, İnternet güvenliği uygulamaları ve bilgisayar cebir sistemleri.

GMP, diğerlerinden daha hızlı olmayı hedefliyor Bignum tüm işlenen boyutları için kitaplık. Bunu yaparken bazı önemli faktörler şunlardır:

İlk GMP sürümü 1991 yılında yapılmıştır. Sürekli geliştirilmekte ve sürdürülmektedir.[8]

GMP, GNU projesi (web sitesinin gnu.org dışında olması kafa karışıklığına neden olabilir) ve GNU Daha Az Genel Kamu Lisansı (LGPL).

GMP, birçok durumda tamsayı aritmetiği için kullanılır. bilgisayar cebir sistemleri gibi Mathematica[9] ve Akçaağaç.[10] Ayrıca, Hesaplamalı Geometri Algoritmaları Kitaplığı (CGAL) çünkü geometri algoritmaları sıradan kayan noktalı CPU matematiği kullanılırken 'patlama' eğilimindedir.[11]

GMP'yi oluşturmak için GNU Derleyici Koleksiyonu (GCC).[12]

Örnekler

Burada, büyük sayıları çoğaltmak ve yazdırmak için GMP kitaplığının kullanımını gösteren bir C kodu örneği verilmiştir:

#Dahil etmek <stdio.h>#Dahil etmek <gmp.h>int ana(geçersiz) {  mpz_t x, y, sonuç;  mpz_init_set_str(x, "7612058254738945", 10);  mpz_init_set_str(y, "9263591128439081", 10);  mpz_init(sonuç);  mpz_mul(sonuç, x, y);  gmp_printf("% Zd n"             "* n"             "% Zd n"             "-------------------- n"             "% Zd n", x, y, sonuç);  / * boş kullanılan bellek * /  mpz_clear(x);  mpz_clear(y);  mpz_clear(sonuç);  dönüş 0;}

Bu kod 7612058254738945 × 9263591128439081 değerini hesaplar.

Bu programı derlemek ve çalıştırmak bu sonucu verir. (The -lgmp Unix tipi sistemlerde derleme yapılıyorsa bayrak kullanılır.)

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

Karşılaştırma için, bunun yerine aşağıdaki eşdeğer C ++ programı yazılabilir. (The -lgmpxx -lgmp Unix tipi sistemlerde derleme yapılıyorsa bayraklar kullanılır.)

#Dahil etmek <iostream>#Dahil etmek <gmpxx.h>int ana() {  mpz_class x("7612058254738945");  mpz_class y("9263591128439081");  std::cout << "    " << x << " n"            << "* n"            << "    " << y << " n"            << "-------------------- n"            << x * y << " n";  dönüş 0;}

Dil bağlamaları

Kitaplık adıDilLisans
GNU Çok Hassas KitaplıkC, C ++LGPL
Matematik :: GMPPerlLGPL
Matematik :: GMPz, Matematik :: GMPf ve Matematik :: GMPqPerlArtistik Lisans v1.0 + GPL v1.0-veya-sonrası
Genel Çok Hassas Python ProjesiPythonLGPL
R paketi 'gmp'RGPL
RubyGems projesiYakutApache 2.0
PHP için GNU Multi-Precision KitaplığıPHPPHP
SBCL için GNU Çok Hassas RutinlerOrtak LispKamu malı
Ch GMPChTescilli
BMDFM için Paralel GMP Sarıcı BMDFM LISP / CKamu malı
Glasgow Haskell Derleyici
(Uygulaması Tamsayı
temelde GMP'ye bir bağlanmadır)
HaskellBSD
luajit-gmpLuaJITMIT
delphi için gmp sarmalayıcıDelphiMIT
ZarithOCamlLGPL
Math.Gmp.Native Kitaplığı.AĞMIT
nim-gmpNimMIT

Ayrıca bakınız

  • GNU MPFR - GNU MP'ye dayalı olarak doğru yuvarlama ile rastgele hassasiyetli hesaplamalar için bir kitaplık
  • CLN - keyfi hassasiyet için bir sınıf kitaplığı
  • MPIR - Windows platformları için MSVC tabanlı bir derleme sistemi sağlamayı amaçlayan, çoğunlukla uyumlu bir arayüze sahip bir GMP çatalı

Referanslar

  1. ^ "GNU MP arşivi". Alındı 2018-12-03.
  2. ^ V6.2.1 - "GNU MP Bignum Kitaplığı". Alındı 2020-11-15.
  3. ^ a b "GMP nedir?". Alındı 2014-04-07.
  4. ^ Granlund, Torbjorn (2009-07-06). "Mpz_set_str ve büyük dizelerle ilgili sorunlar". Alındı 2013-03-17.
  5. ^ "GMP 6.0 Haberleri". Alındı 2019-10-04.
  6. ^ Hughes, Andrew John (2008-02-28). "GMP matematiği kaldırıldı mı?". Alındı 2013-03-17.
  7. ^ "GNU Classpath 0.98" Hiç Olmadığından Daha İyi Geç"". 2009-02-05. Alındı 2013-03-17.
  8. ^ "GNU MP Bignum Kitaplığı". Alındı 2018-12-03.
  9. ^ "Mathematica Kernel: Tasarım ve Uygulamadaki Sorunlar". Ekim 2006. Alındı 2013-03-17.
  10. ^ "GNU Çoklu Hassasiyet (GMP) Kitaplığı". Maplesoft. Alındı 2013-03-17.
  11. ^ "CGAL Kılavuzları".
  12. ^ GCC, GNU MPFR kitaplık, sırayla GMP'ye dayanır. "GCC 4.3 Yayın Serisi: Değişiklikler, Yeni Özellikler ve Düzeltmeler". 2012-11-02. Alındı 2013-03-17.

Dış bağlantılar