Вы можете попытать счастья с помощью надуманного метода, как показано ниже.
Числа могут быть представлены с использованием двоично-десятичного представления.В этом представлении каждая десятичная цифра хранится в 4 битах, и при выполнении сложения, если сумма двух цифр превышает 9, вы добавляете 6 и переносите влево.
Если вы предварительно сохранилиBCD представление всех степеней 2, тогда для преобразования требуется не более 128 дополнений.Вы можете сэкономить немного на том факте, что для низких мощностей вам не нужно добавлять полную длину (39 цифр).
Но это звучит как много операций.Вы можете «распараллелить» их, упаковав несколько цифр BCD в одно целое число: сложение целых чисел в 32 бита эквивалентно 8 одновременным сложениям цифр BCD.Но у нас есть проблемы с переносчиками.Чтобы обойти это, мы можем хранить цифры на 5 битах вместо 4, и переносы появятся в пятом бите.Затем мы можем получить переносы с помощью маскировки, добавить их к следующим цифрам (сдвиг влево на 5) и скорректировать суммы цифр (умножить на 10 и вычесть).
2 3 4 5 6
+ 7 6 9 2 1
= 9 913 7 7
Carries:
0-0-1-0-0
Корректировки:
9 913 7 7
-0000010000
= 9 9 3 7 7
На самом деле, вы должны обрабатывать возможные каскадные переносы, поэтому сумма будет включать два добавления и переноса, а также генерировать сумму и выполнения.
32-битные операции позволяют обрабатывать 6 цифр за раз (7 раундов для 39 цифр) и 64-битные операции, 12 цифр (4 раунда для 39 цифр).