Библиотека арифметики множественной точности GNU
Разработчик(и) | Проект GNU |
---|---|
Первоначальный выпуск | 1991 год [1] |
Стабильная версия | 6.3.0 [2]
/ 30 июля 2023 г. |
Репозиторий | gmplib |
Написано в | C , ( C++ , сборка необязательно) |
Тип | Математическое программное обеспечение |
Лицензия | Двойная лицензия LGPLv3 и GPLv2 [3] |
Веб-сайт | gmplib |
GNU Multiple Precision Arithmetic 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 года Kaffe , виртуальная машина 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] и Клен . [10] Он также используется в Библиотеке алгоритмов вычислительной геометрии (CGAL).
GMP необходим для создания коллекции компиляторов GNU (GCC). [11]
Примеры
[ редактировать ]Вот пример кода C, показывающий использование библиотеки GMP для умножения и печати больших чисел:
#include <stdio.h>
#include <gmp.h>
int main(void) {
mpz_t x, y, result;
mpz_init_set_str(x, "7612058254738945", 10);
mpz_init_set_str(y, "9263591128439081", 10);
mpz_init(result);
mpz_mul(result, x, y);
gmp_printf(" %Zd\n"
"*\n"
" %Zd\n"
"--------------------\n"
"%Zd\n", x, y, result);
/* free used memory */
mpz_clear(x);
mpz_clear(y);
mpz_clear(result);
return 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";
return 0;
}
Языковые привязки
[ редактировать ]Название библиотеки | Язык | Лицензия |
---|---|---|
Библиотека многоточности GNU | С , С++ | LGPL |
Математика::GMP | Перл | LGPL |
Math::GMPz , Math::GMPf и Math::GMPq | Перл | Художественная лицензия v1.0 + GPL v1.0 или новее |
Общий проект Multiprecision Python | Питон | LGPL |
Пакет R «gmp» | Р | лицензия GPL |
Проект RubyGems | Руби | Апач 2.0 |
Крепления Rust FFI для GMP, MPFR и MPC | Ржавчина | LGPL |
Библиотека GNU Multi-Precision для PHP | PHP | PHP |
Подпрограммы многоточности GNU для SBCL | Общий Лисп | Общественное достояние |
Чемпион GMP | Ч | Собственный |
Параллельная оболочка GMP для BMDFM | БМДФМ LISP/C | Общественное достояние |
Глазго Хаскелл-компилятор (Реализация Integer по сути является привязкой к GMP) |
Хаскелл | БСД |
luajit-gmp | ИгратьДополнительно | С |
GMP-обертка для Delphi | Дельфи | С |
Зарит | OCaml | LGPL |
Math.Gmp.Нативная библиотека | .СЕТЬ | С |
ним-GMP | Nim | С |
JGMP | Ява | LGPL |
См. также
[ редактировать ]- GNU MPFR — библиотека для вычислений произвольной точности с правильным округлением, основанная на GNU MP.
- CLN — библиотека классов для произвольной точности
- MPIR – ответвление GMP, больше не поддерживается.
Ссылки
[ редактировать ]- ^ «Архив GNU MP» . Проверено 03 декабря 2018 г.
- ^ Торбьорн Гранлунд (30 июля 2023 г.). «Выпущен GMP 6.3.0» . Проверено 30 июля 2023 г.
- ^ Перейти обратно: а б «Что такое GMP?» . Проверено 7 апреля 2014 г.
- ^ Гранлунд, Торбьорн (6 июля 2009 г.). «Проблемы с mpz_set_str и огромными строками» . Проверено 17 марта 2013 г.
- ^ «Новости GMP 6.0» . Проверено 4 октября 2019 г.
- ^ Хьюз, Эндрю Джон (28 февраля 2008 г.). «Удалена математика GMP?» . Проверено 17 марта 2013 г.
- ^ «GNU Classpath 0.98 «Лучше поздно, чем никогда» » . 05 февраля 2009 г. Проверено 17 марта 2013 г.
- ^ «Библиотека GNU MP Bignum» . Проверено 03 декабря 2018 г.
- ^ «Ядро Mathematica: проблемы проектирования и реализации» . Октябрь 2006 года . Проверено 17 марта 2013 г.
- ^ «Библиотека GNU Multiple Precision (GMP)» . Мэйплсофт . Проверено 17 марта 2013 г.
- ^ GCC использует библиотеку GNU MPFR , которая, в свою очередь, опирается на GMP. «Серия выпусков GCC 4.3: изменения, новые функции и исправления» . 02.11.2012 . Проверено 17 марта 2013 г.