Числа с отрицательной нулевой степенью

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


Способ получения

Как можно получить число в такой степенью? Для начала получим число с отрицательной степенью, содержащей шестнадцатеричные цифры. Например, 1.|−E0 ( 1. -E0): 10/-/КВПF10x. Получилось число как 1.|−140 или по правилу 160 = 1.|+20. Теперь если убрать ещё 20 из порядка: ВП20/-/x→П1. то мы получим 1.|−00 ( 1. -00).

Если вы думаете, что мантисса может быть только единица, то обрадую, что можно и другие. Для исследования чисел с разными мантиссами приведём программу, которая регистры R1…Re заполняет числами с нулевой отрицательной степенью, а на месте первой цифры будет стоять номер регистра. Да, да, для последнего это будет E.|−00.

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  КНОП 1 3 x→П0 1 8 К К{x} /-/ ВП
 10 |  2 F10x В↑ ВП /-/ 5 0 x→П1 0 ←→
 20 |  КНОП ВП П→x1 ←→ КНОП ВП x→Пe Кx→Пe FL0 18
 30 |  С/П

Тут тоже используются недокументированные возможности. Большую часть, адреса с 00 по 17, это документированное получение той же 1.|−00, что мы сделали руками, только без ЕГГ0Га. Причём не через E0, а через L0. Просто число 13 нужно для цикла по оставшимся регистрам R2…Re. Из-за особенностей поведения ВП в программном режиме X нужно копировать в X2. Первый раз нам помогает /-/ по адресу 08, второй раз уже явно делаем В↑ по адресу 12. А вот с 18 адреса начинается шаманство. Фрагмент программы 18…21 увеличивает текущую цифру в шестнадцатеричном смысле. Эта особенность была рассказана в разделе про регистр X2 и команду ВП. А фрагмент 22…25 (тот же раздел) подставляет эту цифру в число из R1. Потом с помощью регистра Re мы сохраняем это в нужном месте и повторяем.

Обозначим такое число с необычной степенью как N. В общем случае, нулевая степень, пусть с минусом, в математическом смысле ничего не меняет, т. е. число должно быть как бы без степени. И большинство операций так его и воспринимают, но есть исключения. Пройдёмся по всем операциям/функциям, использую значения регистров, внесённые программой выше.


Сложение и вычитание

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

2.|−00 + 5.1 = 53: П→x25.1+ = 53. .

2.1 − 3.|−00 = 18: 2.1П→x3 = 18. .

π − 3.|−00 = 28.415926; FπП→x3 = 28.415926 .

E.1 + 2.|−00 = 43: 1.1КВПКНОПП→x2+ = 43. .

Для двух и более значных операндов, выполняется как обычно. Примеры:

2.|−00 + 51 = 53: П→x251+ = 53. .

21 − 3.|−00 = 18: 21П→x3 = 18. .

eπ − 3.|−00 = 20.14069: FπFexП→x3 = 20.14069 .

E1 + 2.|−00 = 43: 11КВПКНОПП→x2+ = 43. .

Если дробное число у которого целая часть нулевая, то выполняется как обычно. Примеры:

0.5 + 4.|−00 = 4.5: 0.5П→x4+ = 4.5 .

E.1|−01 + 4.|−00 = 5.41: 0.9Fx2КВПКНОПП→x4+ = 5.41 .

Сами с собой числа N правила умножения на 10 не придерживаются и выполняются как обычно.

5.|−00 + 2.|−00 = 7: П→x5П→x2+ = 7. .

2.|−00 − 3.|−00 = −1: П→x2П→x3 = -1. .

Так же, как обычно, работает, если второй операнд нулевой. 9.|−00 + 0 = 9: П→x90+ = 9. .

Для сравнения: 9.|−00 + 1 = 19: П→x91+ = 19. .


Умножение и деление

При умножении, когда число N перед операцией находится в регистре Y, а число в регистре X меньше единицы в абсолютном значении, то получается число со степенью −160, т. е. само число N в операции воспринимается как число в степени −160. Кстати, с учётом цикличности ПМК на 1000 степени можно считать это числом в 840 степени. В остальных случаях ведёт как обычное умножение. Пример:

1.5 × 2.|−00 = 3: П→x21.5× = 3. .

0.7 × 2.|−00 = 1.4|−160: П→x20.7× = 0. . Вроде бы ноль, но это потому, что при нормализации числа в степени такого порядка преобразуются в ноль. Для проверки составим программу, которая полученное число умножит на 1.|+80:

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  П→x2 0 . 7 × 8 0 F10x × С/П

После В/0С/П на экране будет 1.4 -80

Если число в X меньше единицы, но имеет порядок меньше −40, то умножение снова проводится как обычно:

1.|−43 × 6.|−00 = 6.|−43: П→x643/-/F10x× = 6. -43.

1.|−40 × 6.|−00 = 6.|−200: П→x640/-/F10x× = 0. .

−1.|−99 × 6.|−00 = −6.|−99: П→x699/-/F10x/-/× = -6. -99.

Если число в X больше единицы, но имеет порядок не меньше 60, то число N снова воспринимается, как число в степени −160.

1.|+62 × 7.|−00 = 7.|−98: П→x762F10x× = 7. -98.

1.|+60 × 7.|−00 = 7.|−100: П→x760F10x× = 0. .

−1.|+99 × 7.|−00 = −7.|−61: П→x799F10x/-/× = -7. -61.

Напомню, если число N находится в регистре X, то происходит обычное умножение, но если в Y тоже N, может другое, то будет как выше степень −160.

3.|−00 × 7.|−00 = 2.1|−159: П→x3П→x7× = 0. . Для проверки

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  П→x3 П→x7 × 8 0 F10x × С/П

= 2.1 -79.

Для деления ситуация похожая. Необычность возникает, только когда делят на N. N в регистре X. Если число в регистре Y по модулю в диапазоне 1 ⩽ Y < 10, сюда же попадают шестнадцатеричные цифры, то в операциях деления N выглядит как число со степенью −160.

8.|−00 ÷ 2 = 4: П→x82÷ = 4. .

18 ÷ 2.|−00 = 9: 18П→x2÷ = 9. .

0.8 ÷ 2.|−00 = 0.4: 0.8П→x2÷ = 4. -01.

8 ÷ 2.|−00 = 4.|+160: 8П→x2÷ = ЕГГ0Г . Для проверки составим программу:

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  Cx 8 П→x2 ÷ 7 0 F10x ÷ С/П

После В/0С/П на экране будет 4. 90.

Единственное исключение – это когда в Y тоже число N. Тогда деление снова проходит как обычно.
8.|−00 ÷ 2.|−00 = 4: П→x8П→x2÷ = 4. .


Жёлтые функции


Синие функции


Итог

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