Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

GNU Multi-Precision Library ( GMP ) является свободной библиотеки для произвольной точности арифметики , работающих на подписанными целых , рациональных чисел и чисел с плавающей точкой . [3] Практических ограничений на точность нет, кроме тех, которые подразумеваются доступной памятью (операнды могут иметь до 2 32 -1 бит на 32-битных машинах и 2 37 бит на 64-битных машинах). [4] [5] GMP имеет богатый набор функций, и функции имеют обычный интерфейс. Базовый интерфейс предназначен для C , носуществуют оболочки для других языков, включая Ada , C ++ , C # , Julia , .NET , OCaml , Perl , PHP , Python , R , Ruby и Rust . До 2008 года , Каффе , виртуальная машина Java , используется GMP для поддержки Java встроенной произвольной точности арифметики. [6] Вскоре после этого в GNU Classpath была добавлена ​​поддержка GMP . [7]

Основными целевыми приложениями GMP являются приложения для криптографии и исследования, приложения для обеспечения безопасности в Интернете и системы компьютерной алгебры .

GMP стремится быть быстрее любой другой библиотеки bignum для всех размеров операндов. Некоторые важные факторы при этом:

  • Использование полных слов как основного арифметического типа.
  • Использование разных алгоритмов для разных размеров операндов ; алгоритмы, которые работают быстрее для очень больших чисел, обычно медленнее для малых чисел.
  • Высоко оптимизированный ассемблере код для наиболее важных внутренних циклов , специализированные для различных процессоров .

Первый выпуск GMP был выпущен в 1991 году. Он постоянно развивается и поддерживается. [8]

GMP является частью проекта GNU (хотя его веб-сайт вне gnu.org может вызвать путаницу) и распространяется под лицензией GNU Lesser General Public License (LGPL).

GMP используется для целочисленной арифметики во многих системах компьютерной алгебры, таких как Mathematica [9] и Maple . [10] Он также используется в библиотеке алгоритмов вычислительной геометрии (CGAL), поскольку геометрические алгоритмы имеют тенденцию «взрывать» при использовании обычных вычислений ЦП с плавающей запятой. [11]

GMP необходим для создания коллекции компиляторов GNU (GCC). [12]

Примеры [ править ]

Вот пример кода C, показывающий использование библиотеки GMP для умножения и печати больших чисел:

#include  <stdio.h>#include  <gmp.h>int  main ( void )  {  mpz_t  x ,  y ,  результат ; mpz_init_set_str ( x ,  «7612058254738945» ,  10 );  mpz_init_set_str ( y ,  "9263591128439081" ,  10 );  mpz_init ( результат ); mpz_mul ( результат ,  x ,  y );  gmp_printf ( "% Zd \ n "  "* \ n "  "% Zd \ n "  "-------------------- \ n "  "% Zd \ n " ,  x ,  y ,  результат ); / * освобождает используемую память * /  mpz_clear ( x );  mpz_clear ( y );  mpz_clear ( результат ); возврат  0 ; }

Этот код вычисляет значение 7612058254738945 × 9263591128439081.

Компиляция и запуск этой программы дает такой результат. ( -lgmpФлаг используется при компиляции в системах типа Unix.)

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

Для сравнения вместо этого можно написать следующую эквивалентную программу на C ++. ( -lgmpxx -lgmpФлаги используются при компиляции в системах типа Unix.)

#include  <iostream>#include  <gmpxx.h>int  main ()  {  mpz_class  x ( "7612058254738945" );  mpz_class  y ( "9263591128439081" ); std :: cout  <<  ""  <<  x  <<  " \ n "  <<  "* \ n "  <<  ""  <<  y  <<  " \ n "  <<  "---------- ---------- \ n "  <<  x  *  y  <<  " \ n " ; возврат  0 ; }

Привязки языков [ править ]

См. Также [ править ]

  • GNU MPFR - библиотека для вычислений произвольной точности с правильным округлением, основанная на GNU MP
  • CLN - библиотека классов для произвольной точности
  • MPIR - ответвление GMP с в основном совместимым интерфейсом, целью которого является предоставление системы компиляции на основе MSVC для платформ Windows.

Ссылки [ править ]

  1. ^ "Архив GNU MP" . Проверено 3 декабря 2018 .
  2. ^ V6.2.1 - "Библиотека GNU MP Bignum" . Проверено 15 ноября 2020 .
  3. ^ a b "Что такое GMP?" . Проверено 7 апреля 2014 .
  4. ^ Granlund, Torbjorn (2009-07-06). «Проблемы с mpz_set_str и огромными строками» . Проверено 17 марта 2013 .
  5. ^ "Новости GMP 6.0" . Проверено 4 октября 2019 .
  6. ^ Хьюз, Эндрю Джон (2008-02-28). "Удалена математика GMP?" . Проверено 17 марта 2013 .
  7. ^ "GNU Classpath 0.98" Лучше поздно, чем никогда " " . 2009-02-05 . Проверено 17 марта 2013 .
  8. ^ "Библиотека GNU MP Bignum" . Проверено 3 декабря 2018 .
  9. ^ «Ядро Mathematica: проблемы проектирования и реализации» . Октябрь 2006 . Проверено 17 марта 2013 .
  10. ^ «Библиотека множественной точности GNU (GMP)» . Maplesoft . Проверено 17 марта 2013 .
  11. ^ "Руководства CGAL" .
  12. ^ GCC используетбиблиотеку GNU MPFR , которая, в свою очередь, полагается на GMP. «Серия выпусков GCC 4.3: изменения, новые функции и исправления» . 2012-11-02 . Проверено 17 марта 2013 .

Внешние ссылки [ править ]

  • Официальный веб-сайт