Из раздела по косвенной адресации мы знаем о правиле сумма = 160
для
отрицательных степеней, которые содержат шестнадцатеричные цифры. Есть
интересный эффект, когда порядок доводится до −160 и в результате
сложения по правилу получается не нулевая степень, а минус нулевая.
Оказывается числа с такой степенью тоже имеют необычные свойства.
Как можно получить число в такой степенью? Для начала получим число с отрицательной степенью, содержащей шестнадцатеричные цифры. Например, 1.|−E0 ( 1. -E0): 1 0 /-/ К− ВП F10x. Получилось число как 1.|−140 или по правилу 160 = 1.|+20. Теперь если убрать ещё 20 из порядка: ВП 2 0 /-/ 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: П→x2 5 . 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: П→x2 5 1 + = 53. .
21 − 3.|−00 = 18: 2 1 П→x3 − = 18. .
eπ − 3.|−00 = 20.14069: Fπ Fex П→x3 − = 20.14069 .
E1 + 2.|−00 = 43: 1 1 К− ВП КНОП П→x2 + = 43. .
Если дробное число у которого целая часть нулевая, то выполняется как обычно. Примеры:
0.5 + 4.|−00 = 4.5: 0 . 5 П→x4 + = 4.5 .
E.1|−01 + 4.|−00 = 5.41: 0 . 9 Fx2 К− ВП КНОП П→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: П→x9 0 + = 9. .
Для сравнения: 9.|−00 + 1 = 19: П→x9 1 + = 19. .
При умножении, когда число N перед операцией находится в регистре Y, а число в регистре X меньше единицы в абсолютном значении, то получается число со степенью −160, т. е. само число N в операции воспринимается как число в степени −160. Кстати, с учётом цикличности ПМК на 1000 степени можно считать это числом в 840 степени. В остальных случаях ведёт как обычное умножение. Пример:
1.5 × 2.|−00 = 3: П→x2 1 . 5 × = 3. .
0.7 × 2.|−00 = 1.4|−160: П→x2 0 . 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: П→x6 4 3 /-/ F10x × = 6. -43.
1.|−40 × 6.|−00 = 6.|−200: П→x6 4 0 /-/ F10x × = 0. .
−1.|−99 × 6.|−00 = −6.|−99: П→x6 9 9 /-/ F10x /-/ × = -6. -99.
Если число в X больше единицы, но имеет порядок не меньше 60, то число N снова воспринимается, как число в степени −160.
1.|+62 × 7.|−00 = 7.|−98: П→x7 6 2 F10x × = 7. -98.
1.|+60 × 7.|−00 = 7.|−100: П→x7 6 0 F10x × = 0. .
−1.|+99 × 7.|−00 = −7.|−61: П→x7 9 9 F10x /-/ × = -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: П→x8 2 ÷ = 4. .
18 ÷ 2.|−00 = 9: 1 8 П→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. .
F√. При взятии корня вычисляется, как обычно, но результат делится на 10.|+48, т. е. степень числа будет −48. Пример:
√(4.|−00) = 2.|−48: П→x4 F√ = 2. -48.
√(E.|−00) = 3.7416573|−48: П→xe F√ = 3.7416573-48.
F1/x. Обратная величина считает число N числом в степени −160.
1 / (2.|−00) = 5.|+159: П→x2 F1/x = ЕГГ0Г .
Для проверки составим программу:
# | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
---|---|---|---|---|---|---|---|---|---|---|
00 | | П→x2 | F1/x | 7 | 0 | F10x | ÷ | С/П |
После В/0 С/П на экране будет 5. 89.
Тригонометрические функции рассмотрим только на нескольких значениях.
Для Fsin только в радианах будут отличия:
X | Р | ГРД | Г |
---|---|---|---|
1.|−00 | 8.4147098|−01 | 1.5707317|−02 | 1.7452405|−02 |
1 | 8.4147103|−01 | 1.5707317|−02 | 1.7452405|−02 |
Для Fcos тоже:
X | Р | ГРД | Г |
---|---|---|---|
2.|−00 | 4.4721363|−01 | 9.9950656|−01 | 9.9939082|−01 |
2 | −4.1614688|−01 | 9.9950656|−01 | 9.9939082|−01 |
Для Ftg тоже:
X | Р | ГРД | Г |
---|---|---|---|
3.|−00 | 3 | 4.7158802|−02 | 5.2407778|−02 |
3 | −1.4254648|−01 | 4.7158802|−02 | 5.2407778|−02 |
Для Fsin-1 все отличаются:
X | Р | ГРД | Г |
---|---|---|---|
1.|−00 | 7.853981|−01 | 50.000003 | 45.000002 |
1 | 1.5707963 | 100 | 90 |
2.|−00 | 1.1071486 | 70.483276 | 63.434949 |
2 | ЕГГ0Г | ЕГГ0Г | ЕГГ0Г |
Для Fcos-1 все отличаются:
X | Р | ГРД | Г |
---|---|---|---|
1.|−00 | 7.8539812|−01 | 49.999997 | 44.999998 |
1 | 0 | 00 | 00 |
2.|−00 | 4.6364761|−01 | 29.516724 | 26.565051 |
2 | ЕГГ0Г | ЕГГ0Г | ЕГГ0Г |
Ftg-1 для чисел N всегда даёт ноль:
X | Р | ГРД | Г |
---|---|---|---|
1.|−00 | 0 | 0 | 00 |
1 | 7.853981|−01 | 50.000003 | 45.000002 |
8.|−00 | 0 | 0 | 00 |
8 | 1.4464413 | 92.083315 | 82.874983 |
Fx2 вычисляет, как обычно, но порядок числа при этом уменьшается на 160. При нормализации получается ноль:
(2.|−00)2 = 4.|−160: П→x2 Fx2 даёт 0. .
(8.|−00)2 = 6.4|−159: П→x8 Fx2 даёт 0. .
Но небольшая проверка показывает истинную картину:
# | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
---|---|---|---|---|---|---|---|---|---|---|
00 | | П→x8 | Fx2 | 7 | 0 | F10x | × | С/П |
После В/0 С/П на экране будет 6.4 -89.
Fex вычисляется как обычно.
Flg выдаёт так:
X | Flg |
1.|−00 | 0 |
---|---|
2.|−00 | −43.128418 |
3.|−00 | −42.952326 |
4.|−00 | −42.827388 |
5.|−00 | −42.730478 |
6.|−00 | −42.651297 |
7.|−00 | −42.58435 |
8.|−00 | −42.526358 |
9.|−00 | −42.475205 |
A.|−00 | −42.429448 |
B.|−00 | −1.6057671 |
C.|−00 | −1.0267076 |
D.|−00 | −6.1309386|−01 |
E.|−00 | −3.0288357|−01 |
Fln тоже начиная с B.|−00 выдаёт другой порядок:
X | Fln |
1.|−00 | 0 |
---|---|
2.|−00 | −99.306853 |
3.|−00 | −98.901388 |
4.|−00 | −98.613706 |
5.|−00 | −98.390562 |
6.|−00 | −98.208241 |
7.|−00 | −98.05409 |
8.|−00 | −97.920559 |
9.|−00 | −97.802776 |
A.|−00 | −97.697415 |
B.|−00 | −3.6974155 |
C.|−00 | −2.3640818 |
D.|−00 | −1.4117008 |
E.|−00 | −6.974152|−01 |
F10x выдаёт ошибку не из-за переполнения, а как обычно: порядок вне диапазона. Хотя отрицательные значения как результат возведения в степень конечно удивляют.
X | F10x |
1.|−00 | ЕГГ0Г |
---|---|
2.|−00 | −13.02585 |
3.|−00 | −36.051703 |
4.|−00 | −59.077562 |
5.|−00 | −7.0398713 |
6.|−00 | −6.4318666 |
7.|−00 | −5.5095304 |
8.|−00 | −3.9441377 |
9.|−00 | −7.0326326|−01 |
A.|−00 | ЕГГ0Г |
B.|−00 | ЕГГ0Г |
C.|−00 | ЕГГ0Г |
D.|−00 | ЕГГ0Г |
E.|−00 | 1 |
Fxy ведёт себя тоже нестандартно. Если число N показатель степени, т. е. в регистре Y, то нормально работает, только если число в X не меньше числа e, а иначе даёт единицу.
Fxy | 1.|−00 | 1 | 2.|−00 | 2 | 3.|−00 | 3 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 1 | 4 | 1 | 7.9999993 |
2.7182817 | 1 | 2.7182817 | 1 | 7.3890551 | 1 | 20.085531 |
2.7182818 | 2.7182818 | 2.7182818 | 7.3890557 | 7.3890557 | 20.085535 | 20.085535 |
3 | 2.9999994 | 2.9999994 | 8.9999984 | 8.9999984 | 26.999992 | 26.999992 |
Если N основание, т. е. в регистре X, то ситуация печальней.
1.|−00 работает, как обычно, т. е. даёт единицу при любом показателе.
2.|−00 быстро скатывается в ошибку:
Fxy | 2 | 2.29 | 2.30 | 2.31 | 2.32 |
2.|−00 | 5.5355546|−87 | 1.7215634|−99 | 0, точнее 6.3773317|−100 | 0, точнее 2.3624032|−100 | ЕГГ0Г – просто ошибка аргумента |
Для остальных показателей и степеней выдаёт ошибку, кроме степени 1. Причём опять идёт изменение уровня начиная с B.|−00.
Fxy | 1 |
2.|−00 | 7.4401479|−44 |
3.|−00 | 1.1160242|−43 |
4.|−00 | 1.4880297|−43 |
5.|−00 | 1.8600371|−43 |
6.|−00 | 2.2320432|−43 |
7.|−00 | 2.6040517|−43 |
8.|−00 | 2.9760592|−43 |
9.|−00 | 3.3480707|−43 |
A.|−00 | 3.7200738|−43 |
B.|−00 | 2.478751|−02 |
C.|−00 | 9.4035621|−02 |
D.|−00 | 2.437284|−01 |
E.|−00 | 4.9787053|−01 |
Набор функций
К°→′,
К°→′",
К°←′",
К°←′,
которые обычно редко используются, здесь помогают расширить
диапазон мантисс для чисел N. Дело в том, что они так же считают
такие числа дробными, но в отличии от остальных функций при
обработке не трогают порядок. Это значит, что число по-прежнему
остаётся с нулевой отрицательной степенью, если конечно в результате
не понизится порядок. Пример:
П→x3
К°→′"
К°←′
К°←′
выдаст
2.9999999-00, если чуть изменить:
П→x3
К°→′"
К°←′"
К°←′",
то уже 2.9945599-00
Или
П→xe
К°←′
К°←′
/-/
даст --.16 -00.
Понятно, что таким образом набор мантисс ограничен, но всё-таки позволяет разнообразить набор чисел N.
Логические функции, как обычно, вообще не обращают внимание на порядок и делают свою обычную работу, убирая всё лишнее.
На практике такие числа могут быть использованы своей двойственностью при выполнении вычислений. Т. е. в обычном случае как обычная константа, но при определённых условиях вдруг меняющая свое поведение. Главным выглядят умножения и деления, и пусть там выходят числа с большим отрицательным порядком, фактически любая X2 влияющая команда тут же превратит их в обычный ноль.