Разработчики) | Проект GNU |
---|---|
Первый выпуск | 1991 [1] |
Стабильный выпуск | 6.2.1 (14 ноября 2020 г . [2] ) [±] |
Репозиторий | gmplib |
Написано в | C , ( C ++ , сборка опционально) |
Тип | Математическое программное обеспечение |
Лицензия | Двойной LGPLv3 и GPLv2 [3] |
Веб-сайт | gmplib |
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 Multi-Precision | C , C ++ | LGPL |
Математика :: GMP | Perl | LGPL |
Math :: GMPz , Math :: GMPf и Math :: GMPq | Perl | Художественная лицензия v1.0 + GPL v1.0 или новее |
Общий проект Python Multiprecision | Python | LGPL |
Пакет R 'gmp' | р | GPL |
Проект RubyGems | Рубин | Apache 2.0 |
Привязки Rust FFI для GMP, MPFR и MPC | Ржавчина | LGPL |
Библиотека GNU Multi-Precision для PHP | PHP | PHP |
Подпрограммы GNU Multi-Precision для SBCL | Common Lisp | Всеобщее достояние |
Ch GMP | Ch | Проприетарный |
Параллельная оболочка GMP для BMDFM | BMDFM LISP / C | Всеобщее достояние |
Компилятор Glasgow Haskell (реализация в Integer основном является привязкой к GMP) | Haskell | BSD |
luajit-gmp | LuaJIT | Массачусетский технологический институт |
gmp-обертка для Delphi | Delphi | Массачусетский технологический институт |
Зарит | OCaml | LGPL |
Math.Gmp. Собственная библиотека | .СЕТЬ | Массачусетский технологический институт |
NIM-GMP | Ним | Массачусетский технологический институт |
См. Также [ править ]
- GNU MPFR - библиотека для вычислений произвольной точности с правильным округлением, основанная на GNU MP
- CLN - библиотека классов для произвольной точности
- MPIR - ответвление GMP с в основном совместимым интерфейсом, целью которого является предоставление системы компиляции на основе MSVC для платформ Windows.
Ссылки [ править ]
- ^ "Архив GNU MP" . Проверено 3 декабря 2018 .
- ^ V6.2.1 - "Библиотека GNU MP Bignum" . Проверено 15 ноября 2020 .
- ^ a b "Что такое GMP?" . Проверено 7 апреля 2014 .
- ^ Granlund, Torbjorn (2009-07-06). «Проблемы с mpz_set_str и огромными строками» . Проверено 17 марта 2013 .
- ^ "Новости GMP 6.0" . Проверено 4 октября 2019 .
- ^ Хьюз, Эндрю Джон (2008-02-28). "Удалена математика GMP?" . Проверено 17 марта 2013 .
- ^ "GNU Classpath 0.98" Лучше поздно, чем никогда " " . 2009-02-05 . Проверено 17 марта 2013 .
- ^ "Библиотека GNU MP Bignum" . Проверено 3 декабря 2018 .
- ^ «Ядро Mathematica: проблемы проектирования и реализации» . Октябрь 2006 . Проверено 17 марта 2013 .
- ^ «Библиотека множественной точности GNU (GMP)» . Maplesoft . Проверено 17 марта 2013 .
- ^ "Руководства CGAL" .
- ^ GCC используетбиблиотеку GNU MPFR , которая, в свою очередь, полагается на GMP. «Серия выпусков GCC 4.3: изменения, новые функции и исправления» . 2012-11-02 . Проверено 17 марта 2013 .
Внешние ссылки [ править ]
- Официальный веб-сайт