Эта статья является прямым продолжением предыдущей публикации, для понимания механики Арифмометра Натурального, читайте первую часть.

Ссылка на первую часть

Вернемся к тому, с чего все началось и освежим память. В книге Столярова А. В. «Программирование: введение в профессию. Том 1: Азы программирования» пример вычитания сложением при помощи дополнения с потерей переноса разряда, представлен на пятиразрядном арифмометре десятичной системы счисления и описан формулой:

x + (100000 − 𝑦) — 100 000

Что такое 100000? Это 99999(максимальное число, которое может отображать пятиразрядный арифмометр) +1(заём у несуществующего разряда сотен тысяч, предварительная компенсация будущей потери переноса разряда для верного вычисления).

Но как происходит то, что после прибавления единицы в последствии теряем сотню тысяч?

Чтобы ответить на этот вопрос, предлагаю провести физико‑математический анализ переноса разряда при переполнении на примере двухразрядного Арифмометра Натурального в десятичной системе счисления с моделированием потока данных при помощи перфоленты.

  • Цель: Физико‑математический анализ потери переноса разряда при переполнении.

  • Оборудование и инструменты:

    • Двухразрядный Арифмометр Натуральный в десятичной системе счисления.

    • 100 сегментов перфоленты.

  • Список сокращений и условные обозначения:

    • АН — Арифмометр Натуральный.

    • ОВРВ — окно вывода результата вычислений.

    • Стрелки на схемах > <> < указывают на позицию ОВРВ

В качестве основы для моделирования мы используем плоскую развертку дисков двухразрядного АН с обозначенными линиями разрыва. Математика распределения выглядит следующим образом:

  • Разряд единиц: содержит 10 ячеек в диапазоне от 0 до 9.

  • Разряд десятков: содержит 100 ячеек в диапазоне от 0 до 99.

Здесь кроется важнейшая особенность АН: из 100 ячеек старшего разряда уникальными являются только 90. Первые 10 ячеек (от 0 до 9) дублируют разряд единиц. Таким образом, общее физическое количество ячеек на двух дисках составляет 110, но информационная ёмкость системы строго ограничена 100 уникальными ячейками.

Для наглядного отслеживания этого информационного потока мы возьмём 100 сегментов перфоленты, что в точности соответствует числу уникальных ячеек АН (от 0 до 99).

Устанавливаем АН в исходное состояние. Все ячейки белого цвета на развёртке изначально являются свободными для заполнения. Смотри рисунок 1.

Рисунок 1
Рисунок 1

Фиксируем первый сегмент перфоленты на нулевой ячейке разряда единиц ( на схеме он обозначен серым цветом). Смори рисунок 2.

Рисунок 2
Рисунок 2

На сегменте перфоленты, зафиксированном на нулевой ячейке разряда единиц, записываем в левом верхнем углу белое число ноль (0). Тем самым мы указываем очерёдность вхождения этого сегмента в АН, начав отсчет с нулевой позиции. Смотри рисунок 3.

Рисунок 3
Рисунок 3

Сдвигаем диск разряда единиц на одну позицию снизу вверх, выводя в окно ОВРВ ячейку с цифрой 1. На эту ячейку мы фиксируем следующий сегмент перфоленты, нанося на него порядковый номер вхождения — белую цифру один (1). Смотри рисунок 4.

Важное правило визуализации для последующих шагов:

  • Черные числа на схемах отображают физическое положение ячеек на АН.

  • Белые цифры фиксируют порядковый номер вхождения сегментов перфоленты для наблюдения за очередностью информационного потока.

Рисунок 4
Рисунок 4

Повторяя итерации с последовательным прокручиванием диска разряда единиц снизу вверх, мы фиксируем входящие сегменты перфоленты на ячейки, где указываем номер вхождения в АН. Таким образом мы полностью заполняем младший разряд. Смотри рисунок 5.

Рисунок 5
Рисунок 5

На разряде единиц (см. рисунок 5) мы видим, что сегменты перфоленты полностью заполнили все доступные ячейки. Введём фундаментальное условие для нашей модели: как только ячейка разряда единиц заходит на повторный цикл, расположенный на ней сегмент перфоленты переносим на ячейку разряда десятков, находящуюся в параллельной позиции ОВРВ.

Смещаем диск разряда единиц на одну позицию, во время движения совершаем действия описанные чуть выше, с разряда единиц нулевой ячейки снимаем сегмент перфоленты и фиксируем его на 10 ячейке разряда десятков, находящейся в позиции ОВРВ. Смотри рисунок 6.

Рисунок 6
Рисунок 6

Фиксируем следующий сегмент перфоленты на освободившейся нулевой ячейке разряда единиц. В левом верхнем углу этого сегмента регистрируем очерёдность его вхождения в АН белым числом десять (10). Смотри рисунок 7.

Рисунок 7
Рисунок 7

Смещаем нулевую ячейку разряда единиц в позицию перед ОВРВ. Одновременно с этим переносим сегменты перфоленты с разряда единиц на разряд десятков, чтобы исключить их повторный проход на новый цикл в разряде единиц. Смотри рисунок 8.

Рисунок 8
Рисунок 8

Проворачиваем диск разряда единиц на один полный оборот, отталкиваясь от позиции его нулевой ячейки на рисунке 8. Смотри рисунок 9.

Рисунок 9
Рисунок 9

Зафиксируем на схемах заполнение АН сегментами перфоленты и сделаем остановку перед переполнением устройства. Смотри рисунки 10, 11, 12, 13, 14, 15, 16.

Рисунок 10
Рисунок 10
Рисунок 11
Рисунок 11
Рисунок 12
Рисунок 12
Рисунок 13
Рисунок 13
Рисунок 14
Рисунок 14
Рисунок 15
Рисунок 15
Рисунок 16
Рисунок 16

Попробуем разобраться с тем, что происходит на рисунке 16. Мы видим, что АН стоит в позиции максимальной ёмкости, при этом имеет 10 свободных ячеек в диапазоне от 0 до 9 в разряде десятков и 10 ячеек с сегментами перфоленты на разряде единиц. Зададимся вопросом: можем ли мы как-то завершить цикл переноса сегментов перфоленты с ячеек разряда единиц на разряд десятков, не нарушая принятых правил переноса?

Напомним условия, которые мы приняли перед началом работы с переносом в АН: когда ячейка заходит на повторный круг в разряде единиц, сегмент перфоленты удаляется с этого разряда и переносится на ячейку разряда десятков, находящуюся в параллельной позиции ОВРВ.

Если продолжить следовать данному правилу, то сегмент перфоленты под номером 90 с разряда единиц мы должны перенести на нулевую ячейку разряда десятков, а это означает начало нового цикла. При любом сдвиге принятая логика движения потока белого числового ряда будет нарушена.

Отсюда можно сделать вывод: в текущем виде модель АН с принятыми логическими условиями и конструкционными особенностями оказалась несостоятельной.

Сделаем доработку АН таким образом, чтобы не нарушалась логика переноса сегментов перфоленты с разряда единиц на разряд десятков и полностью сохранилась очерёдность их вхождения в ячейки АН. Для этого развернём нумерацию ячеек на дисках разрядов устройства в противоположную сторону. Смотри рисунок 17.

Рисунок 17
Рисунок 17

Удаляем на разряде десятков диапазон ячеек от 0 до 9, которые являются дубликатом разряда ячеек разряда единиц, после этих модификаций не будет задержки переноса разряда и разрыва потока белого числового ряда. Смотри рисунок 18.

Рисунок 18
Рисунок 18

Фиксируем сегмент перфоленты на нулевой ячейке разряда единиц. Смотри рисунок 19.

Рисунок 19
Рисунок 19

Диски разрядов АН в новой сборке статичны. Сегмент перфоленты с нулевой ячейки переносим на первую, а на освободившееся место фиксируем следующий сегмент. Смотри рисунок 20.

Рисунок 20
Рисунок 20

Заполним все 10 ячеек разряда единиц. Смотри рисунок 21.

Рисунок 21
Рисунок 21

Заполним АН до 19 ячейки, добавим вид сбоку разряда десятков. Смотри рисунок 22.

Рисунок 22
Рисунок 22

Заполним все свободные ячейки АН сегментами перфоленты на обоих разрядах. Смотри рисунок 23.

Рисунок 23
Рисунок 23

Сдвинем весь массив сегментов перфоленты на одну ячейку, спровоцировав потерю переноса. Смотри рисунок 24.

Рисунок 24
Рисунок 24

Произошел вывод данных за пределы видимости математической формулы, сам выпавший сегмент и то, что осталось на физическом носителе.

Физический носитель теряет один сегмент. Объединив эти противоречия, мы получаем математическое выражение в виде дроби фактической потери как 1/100.

Zenodo https://doi.org/10.5281/zenodo.20137509