Сила 2.
Для простой реализации, вероятно, половина размера слова на вашем компьютере, чтобы вы могли умножать две цифры без переполнения. Итак, 65536 или 4294967296. Или, возможно, половина размера самого большого целочисленного типа по той же причине, но, возможно, с большей производительностью.
Но на самом деле я никогда не реализовывал такую библиотеку: если вы используете самые известные алгоритмы, вы не будете выполнять длинное умножение в школьном стиле. Умножение Карацубы (и любые другие хитрые приемы, которые вы используете) может выиграть от выполнения в целом числе, которое более чем в два раза превышает размер цифр, я действительно не знаю, как работает производительность. Если это так, то вам лучше всего использовать 256 и 32-битную арифметику или 65536 и 64-битную арифметику.
В любом случае, если ваше представление является двоичным, вы можете выбирать и выбирать более крупные основания степени двойки, удобные для каждой операции. Например, вы можете обрабатывать данные как основание 2^16 для умножения, но основание 2^32 для сложения. Это все то же самое, если вы осторожны с порядком байтов. Я бы, наверное, начал с базы 2^16 (поскольку это вынуждает меня с самого начала правильно понимать порядок следования байтов, а 2^8 — нет) и посмотреть, как я продвигаюсь — поскольку каждая операция оптимизируется, часть оптимизация заключается в определении наилучшей базы.
Использование размера, не кратного байтам, возможно, но тогда вам придется использовать одну и ту же базу для всего, потому что в хранилище есть неиспользуемые биты в определенных местах в соответствии с базой.
person
Community
schedule
18.04.2010