Jump to content

Библиотека арифметики множественной точности GNU

(Перенаправлено из GMP (библиотека) )
Библиотека арифметики множественной точности GNU
Разработчик(и) Проект GNU
Первоначальный выпуск 1991 год ; 33 года назад ( 1991 ) [1]
Стабильная версия
6.3.0 [2]  Отредактируйте это в Викиданных / 30 июля 2023 г.
Репозиторий gmplib .org /репо /
Написано в C , ( C++ , сборка необязательно)
Тип Математическое программное обеспечение
Лицензия Двойная лицензия LGPLv3 и GPLv2 [3]
Веб-сайт gmplib .org

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, больше не поддерживается.
  1. ^ «Архив GNU MP» . Проверено 03 декабря 2018 г.
  2. ^ Торбьорн Гранлунд (30 июля 2023 г.). «Выпущен GMP 6.3.0» . Проверено 30 июля 2023 г.
  3. ^ Перейти обратно: а б «Что такое GMP?» . Проверено 7 апреля 2014 г.
  4. ^ Гранлунд, Торбьорн (6 июля 2009 г.). «Проблемы с mpz_set_str и огромными строками» . Проверено 17 марта 2013 г.
  5. ^ «Новости GMP 6.0» . Проверено 4 октября 2019 г.
  6. ^ Хьюз, Эндрю Джон (28 февраля 2008 г.). «Удалена математика GMP?» . Проверено 17 марта 2013 г.
  7. ^ «GNU Classpath 0.98 «Лучше поздно, чем никогда» » . 05 февраля 2009 г. Проверено 17 марта 2013 г.
  8. ^ «Библиотека GNU MP Bignum» . Проверено 03 декабря 2018 г.
  9. ^ «Ядро Mathematica: проблемы проектирования и реализации» . Октябрь 2006 года . Проверено 17 марта 2013 г.
  10. ^ «Библиотека GNU Multiple Precision (GMP)» . Мэйплсофт . Проверено 17 марта 2013 г.
  11. ^ GCC использует библиотеку GNU MPFR , которая, в свою очередь, опирается на GMP. «Серия выпусков GCC 4.3: изменения, новые функции и исправления» . 02.11.2012 . Проверено 17 марта 2013 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0ad7db6a60c81e1b93404d336bcd8a94__1721786280
URL1:https://arc.ask3.ru/arc/aa/0a/94/0ad7db6a60c81e1b93404d336bcd8a94.html
Заголовок, (Title) документа по адресу, URL1:
GNU Multiple Precision Arithmetic Library - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)