LINUX.ORG.RU

GMP 5.0.2 — The GNU Multiple Precision Arithmetic Library

 , , , , ,


0

2

Спустя 15 месяцев после выхода предыдущей версии, 8 мая 2011 года была опубликована версия 5.0.2 свободной открытой библиотеки для расчётов с произвольной точностью над целыми числами, рациональными дробями и числами с плавающей запятой GMP - The GNU Multiple Precision Arithmetic Library.

GMP является частью проекта GNU и распространяется на условиях GNU LGPL.

GMP находит применение в криптографических приложениях, научных исследованиях, алгебраических системах итп.

GMP написана с использованием языка ассемблера и C. При этом GMP считается одной из самых быстрых среди себе равных, как при вычислениях с операндами малой разрядности, так и при расчётах с большим количеством разрядов, благодаря оптимизированному коду и использованию асимптотически оптимальных алгоритмов.

Функции в GMP поделены на категории для удобства использования:

  • mpz - высокоуровневые арифметические и логические функции для операций над знаковыми целыми числами (около 140).
  • mpq - высокоуровневые арифметические функции для операций над рациональными дробями (около 35).
  • mpf - высокоуровневые арифметические функции для операций над числами с плавающей точкой (около 65) для вычислений с точностью не ниже двойной.
  • C++ классы для интерфейса к функциям категорий mpz, mpq, mpf.
  • mpn - низкоуровневые функции для операции с беззнаковыми целыми числами с менее удобным вызовом, но низкими накладными расходами. Используются функциями вышеперечисленных категорий.
  • mpfr - отдельно поддерживаемые и разрабатываемые высокоуровневые арифметические функции для операций над числами с плавающей точкой с высокоточным округлением.

В полном списке изменений, который можно найти в архиве с исходными кодами, всего около 30 изменений, большая часть из которых внесена автором и главным разработчиком GMP Торбйоном Гранлундом (Torbjörn Granlund), также известным соавторством во многих утилит командной строки в Linux (cp,split), авторством GNU superoptimizer'a, а также участием в разработке gcc.
Изменения главным образом касаются исправления ошибок, включения поддержки HPPA 2.0N, ОС Darwin и новых процессоров.

В вышедшем выпуске осталась проблема при компиляции с gcc 4.3.2 на 64-битных архитектурах. При этом проблем с компиляцией, например, с gcc 4.3.1 или gcc 4.3.3, не замечалось. Кстати тот факт, что именно gcc 4.3.2 был включен в поставку Debian Lenny, было и остаётся источником потока багрепортов в рассылку проекта.

GMP используется в библиотеке MPFR и, соответственно, в gcc.

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

>>> Исходный код GMP

>>> Краткий список изменений

>>> Страница проекта GMP

★★★

Проверено: mono ()

> mpq - высокоуровневые арифметические функции для операций над рациональными дробями (около 35).

Регулярно имею дело с делением и сравнением частных, и постоянно тянет перейти от десятичных дробей к рациональным. Кто-нибудь имел дело с mpq, как там с производительностью и удобством?

Smacker ★★★ ()

Прочитал сходу как GIMP, удивился. Хотя новость всё равно хорошая.

anonymous ()

> Краткий список изменений

действительно краткий

aho ()
Ответ на: комментарий от Smacker

про производительность ничего сказать не могу, удобство наступает как привыкнешь, главное что у них с документацией все в порядке

di ()
Ответ на: комментарий от di

>главное что у них с документацией все в порядке

вот это да. Два дня мучался с нерабочим плагином под ритмбокс. В итоге фикс в одну строчку, но доков никаких, интерфейс поменялся. Гемора было...

AVL2 ★★★★★ ()

>В вышедшем выпуске осталась проблема при компиляции с gcc 4.3.2 на 64-битных архитектурах.

Они в холодильнике живут?

rpm -q gcc

gcc-4.5.1-4.fc14.x86_64

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Насколько я понял из того что прочёл на оффсайте и чуток в рассылке - именно эта версия gcc 4.3.2 не собирает на 64-битных архитектурах.
С остальными написал же - всё нормально.
Сам ещё не проверял. Надо бы с 4.6 попробовать.

adriano32 ★★★ ()

Интересно, а для обработки изображений эта либа полезна?

AVL2 ★★★★★ ()

> ассимптотических методов

Во-первых, с одной «с». Во-вторых, не асимптотические методы, а асимптотически оптимальные алгоритмы.

Ибо понятие асимптотического метода не из той степи вообще.

zzo ()

Неплохая штукенция, правда синтаксис, как говорят, «асемблероподобный». Есть C++ интерфейс с более человеческим синтаксисом mpfr++ (живой, но не полностью потокобезопасный) и mprfcpp. Оба поверх MPFR — родственного проекта, см. http://www.mpfr.org/faq.html#mpfr_vs_mpf. Есть еще CLN, старый, удобный, но однопоточный — его я использовал в своем последнем проекте.

unanimous ★★★★ ()

прочитал как «GIMP 5.0.2»
долго думал

megabaks ★★★★ ()
Ответ на: комментарий от Smacker

Регулярно имею дело с делением и сравнением частных, и постоянно тянет перейти от десятичных дробей к рациональным. Кто-нибудь имел дело с mpq, как там с производительностью и удобством?

Пиши на лиспе, там и рациональные дроби есть, и большие числа, и вся фигня.

mv ★★★★★ ()

Хорошая новость. Правда, изменений слишком мало.

twosev ★★ ()
Ответ на: комментарий от Reset

а числа с произвольной точностью есть?

В Питоне есть, но ты же его отрицаешь из идеологических соображений.

Vudod ★★★★★ ()
Ответ на: комментарий от di

Смишно. Ритмбокс вспомнил в той связи, что у того документация к плагинам просто кошмарная. Куцая, бесполезная и к тому же устаревшая.

В итоге даже изкаробочные плагины в федорном ритмбоксе лежат сломанные.

AVL2 ★★★★★ ()

Произвольная точность - это всё здорово, но зачем эта, с позволения сказать, «матемуйня» нужна в GCC? Я так понял, что БЕЗ неё компилер не собирается? (это я следую инструкциям LFS. Который, кстати, не собрался вообще, v.6.8)

matumba ★★★★★ ()
Ответ на: комментарий от matumba

Им нужна библиотека, реализующая плавающую точку. Чтобы вычислять значения константных выражений с плавающей точкой во время компиляции (в том числе, кросс-компиляции).

Manhunt ★★★★★ ()
Ответ на: комментарий от AVL2

Более поздние версии gcc не меняют погоды - под 64 битами она багает.

segfault ★★★★★ ()
Ответ на: комментарий от Smacker

> Регулярно имею дело с делением и сравнением частных, и постоянно тянет перейти от десятичных дробей к рациональным. Кто-нибудь имел дело с mpq, как там с производительностью и удобством?

C++ биндинг там вполне удобный. Производительность - смотря относительно чего. У тебя с десятичными дробями ведь потеря точности происходит, а здесь точность будет абсолютной. Числитель и знаменатель по мере вычислений могут распухнуть до невменяемого количества разрядов (оставаясь при том взаимно простыми), и всё начнет тормозить. В общем, по ситуации смотреть надо.

Manhunt ★★★★★ ()

> При этом GMP считается одной из самых быстрых среди себе равных

> одной из

Прошу прощения, а что есть _еще_ быстрее???

> GMP написана с использованием языка ассемблера и C

Поправочка: GMP написана на ассемблере, а ее поставка укомплектована фронт-ендами, написанными на сях.

Вообще, новость очень порадовала - значит, проект развивается. Я лично использую только GMP для длинной арифметики.

segfault ★★★★★ ()
Ответ на: комментарий от Reset

Из коробки ?

В стандартной библиотеке, так же как и рациональные числа. Целые произвольного размера и комплексные --- в ядре языка.

Vudod ★★★★★ ()

Скомпилировать демо-программку расчета числа ПИ не удалось.. Куча ошибок некорректного преобразования типов.(

sur02111976 ()
Ответ на: комментарий от segfault

> GMP написана на ассемблере

Это не правда. Там есть ассемблерный код, но основной язык для нее - все-таки Си.

Manhunt ★★★★★ ()

Здорово. Только вчера мне её посоветовали попробовать поюзать, а сегодня уже новость на главной :)

Sadler ★★★ ()
Ответ на: комментарий от Manhunt

> Это не правда. Там есть ассемблерный код, но основной язык для нее - все-таки Си.

man функции раздела mpn

Все остальное - только фронт-енды к ним.

segfault ★★★★★ ()
Ответ на: комментарий от mv

Раньше в Gambit Scheme была самая быстрая реализация больших чисел, но теперь GMP быстрее. Поэтому надо писать на лиспе в той реализации, которая поддерживает GMP :)

buddhist ★★★★★ ()

Даже ЛОР намекает: «учи матан!»

fero ★★★★ ()
Ответ на: комментарий от fero

> Даже ЛОР намекает: «учи матан!»

Некогда - надо пересобрать ядро, пропатчить кеды под фрибзд, установить очередной «ускоритель загрузки», закачать ненужный гимп, поплеваться на очередную тему гнома, поЛОРить на сон грядущий, вставить спички в глаза, разглядеть на часах 4 утра и радостно упасть на клаву. Дел - невпроворот! Про сессию молчу уж. :)

matumba ★★★★★ ()

<youtube-mode>
Thumbs up if you firstly read this as gimp
</youtube-mode>

doctorx ★★★ ()
Ответ на: комментарий от Smacker

Производительность не проверял. Одно время даже сделал библиотеку классов С++, использующую GMP. Все нормально работало с высокой точностью. Это особенно важно для учетных задач. Но потом исходники утерял за ненадобностью.

anonymous ()
Ответ на: комментарий от mv

На Ruby еще лучше и проще

irb(main):001:0> 1.0/3.0 => 0.3333333333333333

anonymous ()
Ответ на: комментарий от anonymous

а где тут дроби, большие числа или числа с произвольной точностью ?

Reset ★★★★★ ()
Ответ на: комментарий от Reset

Народ, а где можно качнуть качественные научные книжки? Вот хотябы «Why Software Sucks... and what you can do about it»

anonymous ()
Ответ на: комментарий от segfault

вот ведь жопа. x86_64 нынче основная платформа, а тут такое...

AVL2 ★★★★★ ()
Ответ на: комментарий от anonymous

> «Why Software Sucks»

Офигенно научное название! :))) Пособие троля это, а не книшки!

matumba ★★★★★ ()
Ответ на: комментарий от Vudod

> В Питоне есть, но ты же его отрицаешь из идеологических соображений.

Так новый питон же использует gmp для вычислений? (а старый на вычислениях тупит адски)

anonymous ()
Ответ на: комментарий от anonymous

>Прочитал сходу как GIMP, удивился. Хотя новость всё равно хорошая.

Ты не нужен!

anonymous ()
Ответ на: комментарий от AVL2

Они в холодильнике живут?

Не они, а дебиановцы. В том и проблема 8).

mironov_ivan ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.