Концептуально, так же, как вы делаете арифметику произвольного размера вручную.У вас есть что-то вроде массива значений и алгоритмов для различных операций, которые работают с массивом.
Допустим, вы хотите добавить 100
к 901
.Вы начинаете с двух чисел как массивов:
[0, 1, 0, 0]
[0, 9, 0, 1]
Когда вы добавляете, ваш алгоритм сложения начинается справа, занимает 0+1
, давая 1
, 0+0
, давая 0
, и- теперь сложная часть - 9+1
дает 10
, но теперь нам нужно нести, поэтому мы добавляем 1 к следующему столбцу и помещаем (9+1)%10
в третий столбец.
Когдаваши числа становятся достаточно большими - больше 9999 в этом примере - тогда вам нужно как-то выделить больше места.
Это, конечно, несколько упрощается, если вы храните числа в reverse order.
В реальных реализациях используются полные слова, поэтому модуль действительно имеет некоторую большую степень двойки, но концепция та же.
В Knuth есть очень хороший раздел по этому вопросу.