Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разделы 6.1-6.2.doc
Скачиваний:
1
Добавлен:
14.08.2019
Размер:
285.18 Кб
Скачать

6.1 Операции пересылки или копирования

Эти одноместные операции применяются при пересылке или копировании значений переменных или чисел. Если форматы и/или способы представления информации в источнике и приемнике не совпадают, то возникает задача преобразования данного взятого в формате источника для записи его в формат приемника.

6.1.1 Преобразования формата с плавающей точкой

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

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

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

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

Если исходный код содержит 0 или (рис.5-7), то преобразования сводятся к расширению количества 1 или 0 в полях порядка и мантиссы.

Если исходный формат содержит нормализованное число (рис.5-7), то нужно учесть различие bias в форматах. Для этого смещенный порядок исходного формата следует увеличить на величину разности bias форматов . Содержимое поля дробной части мантиссы необходимо расширить вправо нулями.

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

Например, если ненормализованное число пересылается из одинарного базового формата в двойной базовый, то его порядок (–126). Если дробная часть мантиссы содержит слева 001…, то при нормализации числа его мантиссу придется сдвинуть на три разряда влево и уменьшить порядок до (–129). Код смещенного порядка в формате результата будет . Этот же результат получим, если из разности bias форматов вычтем количество нулей в дробной части мантиссы. Действительно .

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

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

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

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

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

Если исходный формат содержит 0 или , то в формат результата записывают их коды.

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

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

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