Мне нужен модуль для очень быстрых операций с довольно большими числами (256 бит) со знаком. Т. е. что-то типа Int256. Причем принципиальна именно скорость, так как программе приходится выполнять многие миллионы перемножений и сложений.
В Интернете есть довольно много разных модулей с массой операций для очень-очень больших чисел (тысячи десятичных знаков). Какой из них самый быстрый (для чисел не очень-то длинных: 256 бит)? Или есть какой-то шустрый код в какой-нибудь классической книге?
Размещаю упрощенный вариант моей программы. Она работает с символьными комплексными выражениями с целыми коэффициентами, включая определители небольших матриц. Фактически, программа просто раскрывает скобки и таким образом проверяет, равна ли правая часть формулы левой. (В полном варианте программа работает с гиперкомплексными числами и раз в 5 длиннее).
В полном варианте приходится многие миллионы раз производить примерно следующее: пара чисел (именно чисел, а не символьных выражений) порядка 10^20--10^35 умножается, результат складывается (вычитается) с произведением другой подобной пары чисел (т. е. на 2 этапе складываются 2 знаковых числа порядка 10^60--10^70), после чего итог сравнивается с неким заданным числом. (При равенстве программа выходит из цикла; если равенства не было, выдает сообщение о неудаче.)
Для иллюстрации этого я добавила небольшую подпрограмку NConstructor, имитирующую реальные процессы.
Кроме того, помещаю небольшой тестовый файл, иллюстрирующий действие программы (программа запускается на этот файл, все тесты должны давать 0). Последний тест в этом файле как раз запускает NConstructor. Для измерения времени только его и нужно оставить.
Программа конечно весьма кривая, но как известно отстрел пианистов строго запрещен законом. Если нужны комментарии, не вопрос.