Есть ли в C какие-либо серьезные большие целочисленные реализации?

Я работаю над проектом, где я должен уплотнить большие целые числа (как 3^361) с абсолютной точностью и как можно большей скоростью. C является самым быстрым языком, с которым я знаком, таким образом, я пытаюсь кодировать свое решение на том языке.

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

Я очень использовал бы чужой протестированный код с полным набором функциональности (дополнение, вычитание, умножение, разделение, модуляция, возведение в степень, равенство, проверяющее... даже битовая операция была бы сладка), чем пребывание в течение недель, это возьмет меня, чтобы даже начать получать мою собственную версию в нормальном состоянии. В то время как это был бы большой полезный опыт, это не фокус моей проблемы, и я добрался бы до части, которая интересует меня :)

6
задан sadakatsu 6 July 2010 в 23:52
поделиться

6 ответов

Gnu MP предоставляет библиотеку bignum.

3
ответ дан 8 December 2019 в 12:57
поделиться

Несколько человек уже упоминали GMP. Я бы только добавил, что, по крайней мере, в последний раз, когда я смотрел, это было довольно хорошо ограничено работой с gcc.

Если вы хотите использовать другие компиляторы, вы можете рассмотреть пару NTL и MIRACL . Я немного протестировал MIRACL, и, похоже, он работает достаточно хорошо.Я использовал NTL немного больше, и, хотя большие целые числа для него скорее второстепенны, он все же неплохо справляется с ними. Он не претендует на то, чтобы быть таким же быстрым, как GMP (и, по сути, может использовать GMP для выполнения основных операций), но когда я провел минимальное тестирование между ними, я не обнаружил много существенных различий (хотя это было достаточно давно, поэтому я тоже сомневаюсь, что это действительно так).

4
ответ дан 8 December 2019 в 12:57
поделиться

Библиотека OpenSSL также обеспечивает надежную реализацию BigNum ().

3
ответ дан 8 December 2019 в 12:57
поделиться

Я использую MAPM, которая является портативной библиотекой произвольной точности (целые числа и плавающая точка).

3
ответ дан 8 December 2019 в 12:57
поделиться

libtommath от libtomcrypt, вероятно, самый маленький, самый простой и быстрый. (Забавно, что эти 3 превосходные степени почти всегда сходятся вместе ...) Если вы не можете найти апстрим, вы можете получить исходный код из дерева исходных текстов dropbear ssh.

3
ответ дан 8 December 2019 в 12:57
поделиться

Если вам нужен стандарт ANSI C, получите код в Интерфейсы и реализации C Дэйва Хэнсона . Очень четкий и хорошо продуманный.

Если расширения gcc и gcc подходят, то, как отмечали другие, библиотека Gnu Multiprecision (GMP) хорошо продумана и широко используется.

2
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: