Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 3_Маш_ар-ка.doc
Скачиваний:
142
Добавлен:
15.02.2015
Размер:
1.68 Mб
Скачать

3.3.2. Сложение чисел в форме с плавающей точкой

При обсуждении машинной реализации действий над нормализованными числами с плавающей точкой следует иметь ввиду, что «…В стандартных подпрограммах… на машинном языке в очень большой степени используются крайне специфические особенности конкретной модели компьютера. Именно поэтому так мало сходства между двумя подпрограммами, скажем, сложения чисел с плавающей точкой, написанными для разных машин» ([8], с. 249).

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

Алгоритм сложения чисел основан на равенстве

. (29)

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

Алгоритм сложения нормализованных чисел включает следующие действия.

Ш1. Помещение слагаемого с бóльшим порядком на первое место в сумме (для определённости дальнейших действий). Если , то слагаемые переставляются. После этого можно считать, что.

Ш2. Назначение порядка для суммы по бóльшему порядку: .

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

Ш4. Сложение мантисс с выравненными разрядами:

.

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

Алгоритм нормализации суммы состоит из следующих шагов.

Ш1. Проверка ненормализованности с превышением. Если (переполнение дробной части), перейти к шагуШ4.

Ш2. Проверка ненормализованности с недостатком. Если (то есть мантисса нормализована), переход к шагу Ш5 (к округлению).

Ш3. Масштабирование сдвигами влево. Сейчас , то есть первые разряды мантиссы — нулевые. Мантиссасдвигается влево на один разряд относительно десятичной точки перед первым её разрядом (то есть умножается на число:), но при этом для сохранения равенства порядокуменьшается на единицу:. Возврат к шагуШ2 вплоть до обеспечения нормализованности.

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

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

Ш6. Проверка допустимости порядка. Если в результате предшествующих действий окажется, что порядок вышел за допустимый диапазон («переполнение» либо «исчезновение» порядка), то выдаётся сигнал об ошибке.