Я уверен, что вы слышали афоризм, что «в теории нет разницы между теорией и практикой, но на практике есть».
В этом случае в теории есть различия, новсе эти системы работают с одним и тем же конечным объемом адресуемой памяти, поэтому на практике разницы нет.
РЕДАКТИРОВАТЬ:
Предполагая, что вы можете представить натуральное число в любой из этих систем, вы можетепредставляют собой дополнение в любом из них.Если ограничения, которые вас беспокоят, не позволяют вам представить натуральное число, то вы не можете представить Nat * Nat сложение.
Представить натуральное число в виде пары (эвристическая нижняя граница для максимального размера бита илениво вычисленный список битов).
В лямбда-исчислении вы можете представить список как функцию, которая возвращает функцию, которая вызывается с истинным значением, возвращает бит 1, а вызываемая с ложным возвращает функцию, которая делает то же самое.для бита 2 и т. д.
Затем добавляется операция, применяемая к zip из этих двух ленивых списков, распространяющих бит переноса.
Вы, конечно, должны представлять максимальный размер битаэвристический как натуральное число, но если вы создаете только числа с числом битов, которое строго меньше числа, которое вы представляете, и ваши операторы не нарушают эту эвристику, то размер бита индуктивно является меньшей проблемой, чем числа, которые выхочу манипулировать, поэтому операции прекращаются.
Что касается простоты учета крайних случаев, C очень мало вам поможет.Вы можете возвращать специальные значения для представления переполнения / недополнения и даже пытаться сделать их заразными (например, IEEE-754 NaN), но вы не получите жалоб во время компиляции, если не проверите.Вы можете попытаться перегрузить сигнал SIGFPE или что-то похожее на проблемы с ловушками.
Я не могу сказать, что у равен нулю - если х - низ, х + у = х для любого у.
Если вы хотите сделать символьные манипуляции, Matlab и Mathematica реализованы на языках C и C, подобных.Тем не менее, Python имеет хорошо оптимизированную реализацию bigint, которая используется для всех целочисленных типов.Это, вероятно, не подходит для представления действительно очень больших чисел.