Я работаю над проектом, где я должен уплотнить большие целые числа (как 3^361) с абсолютной точностью и как можно большей скоростью. C является самым быстрым языком, с которым я знаком, таким образом, я пытаюсь кодировать свое решение на том языке.
Проблема состоит в том, что я не смог найти хорошую реализацию любых типов данных для представления безграничных целых чисел в C кроме исходного кода Python. Мне требуется время, чтобы пройти код и определить то, в чем я нуждаюсь.
Я очень использовал бы чужой протестированный код с полным набором функциональности (дополнение, вычитание, умножение, разделение, модуляция, возведение в степень, равенство, проверяющее... даже битовая операция была бы сладка), чем пребывание в течение недель, это возьмет меня, чтобы даже начать получать мою собственную версию в нормальном состоянии. В то время как это был бы большой полезный опыт, это не фокус моей проблемы, и я добрался бы до части, которая интересует меня :)
Несколько человек уже упоминали GMP. Я бы только добавил, что, по крайней мере, в последний раз, когда я смотрел, это было довольно хорошо ограничено работой с gcc.
Если вы хотите использовать другие компиляторы, вы можете рассмотреть пару NTL и MIRACL . Я немного протестировал MIRACL, и, похоже, он работает достаточно хорошо.Я использовал NTL немного больше, и, хотя большие целые числа для него скорее второстепенны, он все же неплохо справляется с ними. Он не претендует на то, чтобы быть таким же быстрым, как GMP (и, по сути, может использовать GMP для выполнения основных операций), но когда я провел минимальное тестирование между ними, я не обнаружил много существенных различий (хотя это было достаточно давно, поэтому я тоже сомневаюсь, что это действительно так).
Библиотека OpenSSL также обеспечивает надежную реализацию BigNum (
).
Я использую MAPM, которая является портативной библиотекой произвольной точности (целые числа и плавающая точка).
libtommath от libtomcrypt, вероятно, самый маленький, самый простой и быстрый. (Забавно, что эти 3 превосходные степени почти всегда сходятся вместе ...) Если вы не можете найти апстрим, вы можете получить исходный код из дерева исходных текстов dropbear ssh.
Если вам нужен стандарт ANSI C, получите код в Интерфейсы и реализации C Дэйва Хэнсона . Очень четкий и хорошо продуманный.
Если расширения gcc и gcc подходят, то, как отмечали другие, библиотека Gnu Multiprecision (GMP) хорошо продумана и широко используется.