Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яп.doc
Скачиваний:
63
Добавлен:
13.05.2015
Размер:
216.06 Кб
Скачать

2 Бита расходуется на запись знака числа и порядка.

Cогласно формуле (9), k2 = 3.322·k10; поскольку k10 = 38, очевидно, максимальный показатель порядка двоичного числа k2 = 3.322·3812610, что требует в двоичном представлении, согласно формуле Хартли, 7 бит.

Под запись мантиссы отводится 48 - 2 - 7 = 39 бит.

С учетом скрытого разряда точность обработки составит (39 + 1)/3,32212 десятичных разрядов.

Изначальной причиной возникновения погрешности обработки кодов вещественных чисел является ограниченность разрядной сетки при их представлении и, следовательно, наличие погрешности неизбежно. Однако ее величина зависит от количества имеющихся разрядов и, в частности, уменьшить погрешность можно за счет расширения разрядной сетки, т.е. выделения большего количества ячеек памяти для записи числа. Например, в языке PASCAL определен вещественный тип Extended, числа которого занимают 10 байт, что обеспечивает точность мантиссы до 20 десятичных знаков и значение модуля порядка до 4932. Несколько вариантов представления вещественных чисел в языках программирования высокого уровня используется как одно из средств оптимизации программы. Повышение точности вычислений требует больших ресурсов памяти компьютера; одновременно с этим возрастает и время вычислений. Таким образом, при составлении программы для практической задачи решается проблема нахождения компромисса между точностью результата и временем обработки.

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

40. Сложение и умножение нормализованных чисел. Примеры.

Сложение нормализованных чисел

Пусть имеются два числа X1 = M1·pk1 и X2 = M2·pk2 (здесь индексы у мантиссы и порядка означают не систему счисления, а служат номерами чисел). Сложение должно начинаться с выявления большего из k1 и k2, нахождения модуля их разности k =|k1 - k2| и сдвига вправо на k разрядов мантиссы того числа, у которого k оказался меньше. После этого выполняется сложение мантисс, порядку результата присваивается значение большего из имеющихся и при необходимости производится нормализация результата. Алгоритм сложения нормализованных чисел представлен в виде блок-схемы на рисунке 1. При сдвиге вправо мантиссы меньшего числа происходит потеря k младших значащих цифр, что приводит к появлению погрешности сложения.

Рассмотрим действие алгоритма на примере сложения десятичных чисел в ограниченной разрядной сетке.

Пример 17. Найти сумму X1=0,87654·101, а X2=0,94567·102, если для записи мантиссы отводится 5 разрядов.

Согласно алгоритму k = 1 и k1<k2. Следовательно, k=k2=2, а мантисса числа X1 должна быть сдвинута на 1 разряд вправо (при этом из-за ограниченности разрядно сетки пропадет цифра 4). Новая мантисса получается суммированием M=0,94567+0,08765=1,03332; поскольку она выходит за допустимый интервал представления мантисс, необходимо его нормализовать M ’ = 0,10333 (при этом теряется цифра 2 в младшем разряде); k ’ = k+1=3. Окончательно получаем: X=0,10333·103. Точный результат суммирования оказался бы 103,3324.

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

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

Умножение нормализованных чисел X1 X2 производится в соответствии с правилами: если по-прежнему X1 = M1·pk1 и X2 = M2·pk2, то, очевидно, мантисса произведения M=M1·M2, а порядок k=k1+k2; при необходимости полученное число нормализуется.

Операция деления, проводимая как над целыми, так и вещественными числами, приводит в общем случае к появлению вещественного числа, поэтому целые числа предварительно преобразуются в вещественный тип, т.е. переводятся в нормализованную форму. Очевидно, при делении X1X2 мантисса частного M = M1/M2, а порядок k = k1-k2. При этом непосредственно операция деления сводится к сдвигу делителя вправо и последовательному вычитанию его из делителя (т.е. сложения с дополнительным кодом вычитаемого). Как и в предыдущих операциях, результат деления при необходимости нормализуется.

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

(X1X2) X3 X1 (X2 X3) и (X1X2) X3 X1 X3 X2 X3.

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

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

В компьютерах арифметические устройства выполняют действия не с самими двоичными числами по правилам двоичной арифметики, а с их двоичными кодами (представлениями) по правилам арифметики двоичных кодов.

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

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

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