Даже если вы это знаете, тот факт, что вычисления могут выполняться удивительным набором различных способов, все равно вызывает удивление. Программист Lapinozz решил доказать свою правоту, построив полный сумматор из картона, мрамора и горячего клея.
Вы можете увидеть полный проект на сайте Lapinozz, но сначала стоит несколько слов пояснить.
Полусумматор принимает два входных бита и производит сумму и перенос. Логическая таблица для полусумматора:
b1 b2 Перенос суммы 0 0 0 00 1 1 01 0 1 01 1 0 1
Вы можете видеть, что сумма просто
b1 XOR b2
и Carry — это
b1 И b2
Это означает, что вы можете сложить два бита вместе, если можете реализовать вентиль И и вентиль XOR. В этом прелесть двоичной работы, она сводит арифметику к логике.
Однако полусумматора недостаточно, потому что у вас может быть перенос из предыдущей битовой позиции для добавления. Вы можете построить полный сумматор из двух полусумматоров, и именно так большинство людей предпочитают реализовать полный сумматор:
b1 b2 C Перенос суммы 0 0 0 0 00 1 0 1 01 0 0 1 01 1 0 0 1
0 0 1 1 00 1 1 0 11 0 1 0 11 1 1 1 1
Проблема в том, что потребовалось бы много вырезать картон, чтобы создать машину, которая складывает шарики вместе. Решение состоит в том, чтобы заметить, что с точки зрения того, что должны делать шарики, можно проще описать полный сумматор:
Если вход — один шарик, то он должен попасть в первый выход.
Если на входе два шарика, то только один из них должен попасть на второй выход.
Если на входе три шарика, то на оба выхода должны попасть ровно два из них.
Все, что нам нужно, это ворота, которые делают разные вещи для одного, двух и трех шариков. Это может быть создано с помощью модификации одинарного полусумматора. Хотя это проще, мне все равно кажется сложным, но вроде работает, и можно добавить четыре бита:
Вы кладете шарики вверху — шарик для единицы и никакой шарик для нуля, и вы кладете два ряда по четыре шарика, чтобы представить два двоичных числа, которые вы хотите сложить. Затем вы снимаете кусок картона и позволяете им упасть на дно. Некоторые шарики остаются в машине, но те, которые проходят, — это результат — одно 5-битное значение. Конечно, это не всегда срабатывает, поскольку шарики подпрыгивают и не падают с одинаковой скоростью, но если вы повторяете, то иногда получаете ответ.
Чтобы узнать о мельчайших деталях и некоторых красивых анимированных GIF-изображениях с изображением шариков, проходящих через ворота, посетите сайт Lapinozz.
Раньше были компьютеры на основе мрамора, но мраморные шарики просто меняли состояние рычагов, которые отображали состояние системы. Эта конкретная машина использует ворота для работы с шариками, представляющими числа, и делает это параллельным по словам, последовательным по битам способом. То есть именно тот факт, что один шарик следует за другим, отличает поведение одного и двух шариков. Например, рассмотрим простой логический элемент И:
Два бита приходят один за другим. Если есть только один бит, ничего не выходит. Вы получите результат только в том случае, если чашка заполнена первым шариком, а второй шарик катится по нему.