<<
>>

Умножение дробных чисел

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

Кроме того, приводится программа умножения формата 16- 16 = 32, основанная на алгоритме Бута. Формат произведения здесь не ограничен форматом сомножителей, как в других программах умножения чисел ограниченной точности, что позволяет использовать программу и для умножения целых точных чисел.

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

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

Аналогично можно использовать умножение целых беззнаковых двоичных чисел для получения модуля произведения дробных чисел со знаком:

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

Методика умножения дробных знаковых чисел с использованием программ умножения целых чисел имеет следующий вид: 1) получение модулей сомножителей; 2) формирование их произведения с помощью программ целочисленной арифметики; 3) сдвиг произведения влево на один разряд; 4) преобразование модуля произведения в дополнительный код, если знаки сомножителей различны.

го умножения У32Б и трем вспомогательным подпрограммам ДОПВ, ДОПД, ДОПН:

В программе использовано округление произведения путем отбрасывания младших 16 разрядов полного произведения. Вспомогательные программы ДОПВ, ДОПД, ДОПН выполняют преобразование чисел, размещенных соответственно в регистровых парах (В, С), (D, Е) и (Н, L), в дополнительный код в соответствии с формулой (1.8):

Эти вспомогательные программы широко используются далее 'при разработке арифметических программ.

Тестовые данные для программы УДФ16 приведены в табл. 1.12 (запятая в данных подразумевается после первого бита старшей шестнадцатеричной цифры).

Табл. 1.12. Тесты умножения формата 16-16=16 (дробные двоичные числа в дополнительном коде)

Программа УДФ17 в отличие от всех предыдущих программ умножения оперирует с сомножителями, размещенными не на регистрах, а в памяти системы, причем знак каждого сомножителя расположен в старшем разряде знакового байта, а цифровая часть сомножителя — в двух соседних байтах:

Программа УДФ17, как и УДФ16, использует обращение к подпрограмме беззнакового умножения У32Б и вспомогательным программам ДОПВ, ДОПД, но в отличие от программы УДФ16 не производит сдвига влево произведения, так как в данном случае цифровые части сомножителей можно интерпретировать как дробные беззнаковые числа. Кроме того, в программе УДФ17 используется при переходе от полноформатного произведения к сокращенному симметричный метод округления

(1.9) .

Эта программа является базовой при построении программ умножения чисел с плавающей запятой (об этом см. в гл. 2). Тестовые данные для программы УДФ17 можно получить из табл. 1.12 путем сдвига ее данных на один двоичный разряд влево.

Программа УДФ24, как и УДФ17, оперирует с сомножителями, размещенными в памяти, причем каждый сомножитель содержит три байта (СТБ, СРБ, МЛБ) со знаковым разрядом в старшем бите СТБ:

Программа преобразует сомножители в прямой код, обращаясь к вспомогательной программе ДОПЗ, которая реализует дополнение трехбайтного числа непосредственно в памяти:

Программа УДФ24 выполняет серию промежуточных умножений путем вызова подпрограмм У24А и У88Б1. Вычисление конечного произведения происходит по схеме, приведенной на рис. 1.7. Полноформатное произведение 24-24 = 48 содержит все шесть комбинаций промежуточных произведений форматов 8-8=16 и 8-16 = 24, образуемых умножением соответствующих байтов ММ и МН. Поскольку сокращенное произведение (заштриховано на рис. 1.7) содержит только три старших байта полного произведения, то, очевидно, нет необходимости вычислять все промежуточные произведения. В программе УДФ24 полностью используются промежуточные произведения ПР4, ПРЗ, ПР2 и частично (без своего МЛБ) ПРІ. Отбрасывание невычисляемых произведений СРБ2Х ХМЛБ1, МЛБ2 • МЛБІ и МЛБ ПРІ дает граничную абсолютную ошибку не более единицы младшего разряда сокращенного произведения. С учетом последующего сдвига произведения на один разряд влево эта ошибка увеличивается в два раза.

Таким образом, граничная относительная ошибка округления полного произведения становится сравнимой с ошибкой операции умножения по формуле (1.18). Точность произведения можно повысить в два раза, если за счет усложнения программы вычислять дополнительно СТБ промежуточного произведения СРБ2-МЛБ1. Тестовые данные для программы УДФ24 приведены в табл. 1.13.

Табл. 1.13. Тесты умножения формата 24-24=24 (дробные двоичные числа в дополнительном коде)

Особенность алгоритма состоит в сложении (вычитании) в каждом цикле умножения СЧП и ММ в зависимости не от значения очередного разряда МН, как обычно, а от изменения очередного разряда множителя относительно его поедыдѵпіего пазояпа. Пои изменении видя

действию программа УДФ32 более чем в два раза проигрывает, но по затратам памяти на 29 % экономичнее (с учетом подпрограмм для УД32). Тестовые данные для программы УДФ32 можно легко получить из табл. 1.10.

1.4.

<< | >>
Источник: Гуртовцев А. Л., Гудыменко С. В.. Программы для микропроцессоров: Справ, пособие.— Мн.: Выш. шк.,1989.— 352 с.: ил.. 1989

Еще по теме Умножение дробных чисел: