Научная статья на тему 'Реалізація на мові ПЛ/1 арифметичних дій з числами, абсолютні величини порядків яких перевищують допустимі значення'

Реалізація на мові ПЛ/1 арифметичних дій з числами, абсолютні величини порядків яких перевищують допустимі значення Текст научной статьи по специальности «Математика»

CC BY
70
13
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
прийоми програмування / команди асемблера / нормалізація чисел з плаваючою крапкою

Аннотация научной статьи по математике, автор научной работы — Я К. Трохименко, Н И. Ястребов, Л В. Гаевая

Запропоновано ефективні прийоми програмування на мові ПЛ/1 арифметичних дій з числами, мантиси і порядки яких представлені різними змінними. Оператори ПЛ/1 використовуються таким чином, щоб звести до мінімуму число команд Асемблера, які їх реалізують. Нормалізація чисел з плаваючою крапкою проводиться без операцій множення і логарифмування.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Реалізація на мові ПЛ/1 арифметичних дій з числами, абсолютні величини порядків яких перевищують допустимі значення»

УДК 621.372.061

Я. К. ТРОХИМЕНКО, д-р техн. наук, Н. И. ЯСТРЕБОВ, ст. науч. сотр., Л. В. ГАЕВАЯ, студентка

РЕАЛИЗАЦИЯ НА ЯЗЫКЕ ПЛ/1 АРИФМЕТИЧЕСКИХ ДЕЙСТВИЙ С ЧИСЛАМИ, АБСОЛЮТНЫЕ ВЕЛИЧИНЫ ПОРЯДКОВ КОТОРЫХ ПРЕВЫШАЮТ ДОПУСТИМЫЕ ЗНАЧЕНИЯ

При решении радиотехнических задач на ЭВМ широко используются символьные методы, предполагающие вычисление дробно-рациональных функций комплексной переменной р (F(p)=A(p)JB(p), где Л(р) и В (р) — полиномы аргумента р), и их анализ [5]. Полиномы числителя и знаменателя F(p) являются алгебраическими дополнениями матрицы эквивалентных параметров W, поэтому коэффициенты А(р) и В(р) определяются суммами произведений весов определенных комбинаций элементов анализируемой схемы. Если матрица W имеет размерность пХп, то в зависимости от вида схемной функции для А(р) и В(р) приходится вычислять определители п-го, (п—1)-го или (я—2)-го порядка [7] и, следовательно, находить произведения п, п—1, п—2 сомножителей. Это может привести к получению таких чисел, которые выходят за диапазон стандартно представимых чисел в ЭВМ. Так как коэффициенты полиномов представляются числами с плавающей точкой, то при программировании на ПЛ/1 их величины не должны быть меньше 5.4Е—78 и больше 7.2Е + 75, ибо в противном случае произойдут ситуации исчезновения порядка (UNDERFLOW) или переполнения порядка (OVERFLOW) соответственно [3]. Указанные ограничения связаны с тем, что в ЭВМ серии ЕС для порядка числа с плавающей точкой во внутреннем представлении отводится только семь бит. При анализе небольших схем для предотвращения подобных ситуаций обычно производят нормирование весов элементов схемы [5], однако для сложных схем в большинстве практических случаев нормирование не дает желаемого результата, так как веса элементов могут отличаться на несколько порядков, например омы и сотни килоом, пикофарады и сотни микрофарад. Кроме того, ситуации UNDERFLOW и OVERFLOW могут возникнуть при вычислении значений самих полиномов для получения частотных и временных характеристик, определения устойчивости посредством нахождения корней полиномов.

В силу изложенного в программах символьного анализа, ориентированных на исследование схем, содержащих десятки узлов и сотни компонентов и более, числа с плавающей точкой представляют раздельно в виде мантиссы M и порядка К и раздельно производят над ними действия [1]. Это позволяет практически избежать ситуаций исчезновения и переполнения порядка, так как целой переменной К можно отвести двух- или четырехбайтовое поле, и максимальная ее абсолютная величи-

5-7-541

65.

на будет соответственно равна 215 или 231 [3]. В наиболее совершенных программах символьного анализа, таких как АС-13 [6] или ТОПАН-4 [2], анализирующие блоки, выполняющие действия над полиномами, написаны на языке Ассемблер и в машинных кодах, что позволяет эффективно оперировать с внутренним представлением чисел и производить их нормализацию после каждой арифметической операции с помощью логических команд. Нами предлагаются эффективные приемы программирования арифметических действий над числами с разделенными мантиссами и порядками на языке ПЛ/1, доступном широкому кругу пользователей ЕС ЭВМ.

Прежде всего отметим, что для переменных с плавающей точкой внутренняя кодированная форма является нормализованной шестнадцатиричной формой с плавающей точкой. В первом бите первого байта машинного представления числа А записывается его знак, в битах со второго по восьмой — порядок АР (в двоичной системе), причем за нуль принято значение АР-64 [3]. В остальных байтах размещена мантисса-—по две шестнадцатиричные цифры в каждом байте. Следовательно, значение числа с плавающей точкой равно ±АМ- 16АР_64. После каждой арифметической операции с числами, у которых мантиссы и порядки представлены двумя разными переменными, необходимо производить нормализацию мантиссы AM, корректируя соответствующим образом порядок АР. Если число рассматривать как десятичное, то для его нормализации необходимо производить умножение AM на lO^S что приводит к непроизводительным затратам времени. Однако средства ПЛ/1 позволяют работать со строками битов, и для нормализации AM достаточно записывать подстроку 'ЮООООО'В в биты числа AM, отведенные для его порядка. Следует учитывать, что это будет нормализация шестнадцатиричного числа, поэтому в дальнейшем все действия будут выполняться в шестнадцатиричной системе.

Итак, для выделения из числа А его шестнадцатиричного порядка и мантиссы введем соответственно две переменные АР— FIXED BINARY и AM—FLOAT, а также вспомогательную переменную 5—строку N битов (Af=32, если А объявлено как FLOAT (6), и N=64, если A FLOAT (16)). Оператором S = UNSPEC^) в строке S получим машинное представление числа А. Отметим, что этому оператору соответствует одна команда Ассемблера MVC [4]. Теперь из этой строки необходимо выделить порядок АР. Может показаться, что наиболее просто это сделать выборкой из 5 подстроки битов со второго по восьмой функцией SUBSTR(5, 2, 8), переводом ее в число АР и уменыпением\последнего на 64. Однако нами установлено, что для выполнения только функции SUBSTR(5, 2, 8) требуется 13 команд Ассемблера, в то время как для выборки одного целого байта из 5 функций SUBSTR(5, 1, 8)—только одна команда МУС. Исходя из этого выделение порядка АР наибо-

лее эффективно реализуется операторами ПЛ/1 UNSPEC (АР) = (8) '0'ВИ SUBSTR (S, 1,8); (три команды MVC)

IFAP > 127 THEN АР = АР —192; ELSE АР = АР —64;

(одно сравнение и одно вычитание). Здесь в условном операторе учтено, что исходное число может быть как положительным, так и отрицательным. Для того чтобы переменной AM присвоить значение нормализованной мантиссы числа А, достаточно в первый байт строки S записать 'ОЮООООО'В и выполнить оператор UNSPEC (ЛМ)=5. Кроме того, если А отрицательно, необходимо поменять знак у AM: AM — —AM. Все это требует не более трех команд МУС.

Перейдем к операции умножения. Пусть числа ХМ и YM — нормализованные мантиссы чисел X и У, а ХР и YP — их порядки, полученные вышеизложенным способом. Очевидно, для того чтобы получить результат произведения Н в виде двух переменных — мантиссы ИМ и порядка HP, необходимо перемножить ХМ и YM, а ХР и YP сложить, т. е. HM=XMxYM, НР = = XP+YP. Так как ХМ и YM нормализованы, то шестнадцатиричный порядок НМ может уменьшиться только на единицу. В этом случае НМ необходимо домножить на 16, а из HP вычесть единицу. Такое домножение НМ на 16 реализуется косвенным путем засылкой в первый байт внутреннего представления НМ строки битов 'ОЮООООО'В. Однако если сомножители ХМ и YM имели разные знаки, то у НМ необходимо поменять знак: НМ = = —НМ. Таким образом, при реализации умножения работа с подстроками битов организуется тоже побайтно, что сводит к минимуму число команд Ассемблера, реализующих операторы ПЛ/1.

Для выполнение сложения чисел X и У необходимо прежде всего уравнять их порядки ХР и YP. При этом вычисляется вспомогательная переменная К = 64—(ХР—YP), если XP>YP, или К=64— (YP—ХР), если XP<YP. В том случае, когда К<48, а это будет если —IT) >16, слагаемым с меньшим по-

рядком можно пренебречь, так как оно на сумму не влияет (полагается, что ХМ и YM объявлены как FLOAT (16). Если К больше или равно 48, то мантисса слагаемого с меньшим порядком, например YM, корректируется следующим образом: S = UNSPEC (YM); SUBSTR (S, 1, 8) = SUBSTR (UNSPEC [K, 9, 8)); UNSPEC (УМ) =5; где S — вспомогательная строка битов. Эти три оператора ПЛ/1 выполняются тремя командами Ассемблера МУС. Если исходная YM была отрицательна, То у скорректированной YM необходимо изменить знак. После такого вырав нивания порядков получим HM=XM-\-YM\ HP— Р, и норма лизуем НМ описанным выше способом. ;>

Операция деления выполняется аналогично умножению, с той лишь разницей, что у делимого и делителя" порядки соответствен но вычитаются, а мантиссы делйтся; Кроме того, в результате

5*

67

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

При извлечении квадратного корня порядок делится на 2, и корень извлекается только из мантиссы с ее последующей нормализацией. Если порядок был нечетным и положительным, то результат домножается на 4, а если нечетным и отрицательным — на 0,25.

В местах программы, где есть уверенность, что ситуаций OVERFLOW и UNDERFLOW происходить не будет, мантиссу AM и порядок АР можно снова объединить в одну переменную А и работать с ней, как обычно. Для этого используется тот же прием, что и при выравнивании порядков чисел при их сложен и S = UNSPEC (ЛМ); АР=АР + 64: SUBSTR (5, 1, 8) = = SUBSTR(UNSPEC (АР), 9, 8); UNSPEC (4)=S; IF AMC ,<0 THEN A = —A.

Предложенные приемы программирования реализованы в процедурах сложения, умножения, извлечения квадратного корня, деления чисел, представленных раздельно мантиссами и порядками, в программах формирования и исследования схемных функций на языке ПЛ/1. При этом учтены ситуации, когда один из операндов равен нулю. Время вызова и выполнения этих процедур на ЭВМ ЕС-1033 находится в пределах сотен микросекунд.

1. Блажкевич Б. И., Мочернюк Ю. П. Метод системных графов и его применение „ля анализа линейных систем. Львов, 1977. 56 с. (Препр. / АН УССР ФМИ; № 2). 2. Ларин А. Г., Томашевский Д. И., Шумков Ю. М., Эйдельнант В. М. Машинная оптимизация электронных узлов РЭА. М.: Сов. радио, 1978. 192 с. 3. Лепин-Дмитрюков Г. А. Программирование на языке ПЛ/1 (для ДОС ЕС ЭВМ). М. : Сов. радио, 1978. 288 с. -4. Рад У. Программирование на языке Ассемблера и вычислительные системы IBM-360 и 370. М.: Мир, 1979. 592 с. 5. Трохименко Я. К. Проектирование радиотехнических схем на инженерных ЭЦВМ. К.: Технша, 1976. 272 с. 6. Шаповалов Ю. И., Давидюк Р. Д. Особенности реализации метода топологического анализа схем в программе ACI3EC // Изв. вузов СССР. Радиоэлектроника. 1983. № 6. С. 79—81.

Поступила в редколлегию 15.09.86

УДК 621.3.012.8

В. С. ВУНТЕСМЕРИ, канд. техн. наук

СОГЛАСОВАНИЕ ГЕЛИКОНОВОГО ВЕНТИЛЯ

В работе [1] получена матрица рассеяния геликонового вентиля. Элементы ее представляют собой коэффициенты отражения и передачи при включении вентиля в линию передачи с волновым сопротивлением 20[Ом]. Анализ коэффициентов 5ц5к показывает, что входное сопротивление вентиля носит индуктивный характер. Поэтому для узкополосного согласования достаточно включить на входах вентиля емкости, величина^

i Надоели баннеры? Вы всегда можете отключить рекламу.