Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / пособие_m.doc
Скачиваний:
76
Добавлен:
10.05.2015
Размер:
484.35 Кб
Скачать
  1. Вычисления с плавающей запятой

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

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

Однако при таком представлении чисел диапазон получается очень маленьким. Одно из решений этой проблемы связано с введением масштабирования (неявным умножением на масштабный коэффициент) каждого числа. Для этого к каждому числу присоединяется некоторый индикатор масштаба. Очевидно, что это эквивалентно указанию с каждым числом второго числа, показывающего положение двоичной запятой в первом числе. Таким образом, положение двоичной запятой может изменяться от числа к числу, т.е. она начинает “плавать’. Это и есть представление чисел с плавающей запятой.

Для работы с такими числами в ранних микропроцессорных системах семейства Intel использовались арифметические сопроцессоры. Так, для работы с процессорами 8086 применялись отдельные микросхемы – арифметический сопроцессор 8087, для работы с микропроцессорами 80286 – сопроцессоры 80287, а для работы с процессорами 80386 – сопроцессоры 80387.

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

6.1. Форматы чисел с плавающей запятой

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

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

В формате с одинарной точностью один разряд отводится для указания знака, 8 разрядов используются для указания порядка, а под мантиссу отводится 23 разряда. Всего в этом формате используется 32 разряда.

В формате с двойной точностью один разряд отводится для знака, 11 разрядов – для указания порядка, 52 разряда используются для изображения мантиссы. В этом формате используются 64 разряда.

В формате с расширенной точностью один разряд используется для знака, 15 разрядов – для указания порядка и 64 разряда используются для указания мантиссы. В формате с расширенной точностью используется 80 разрядов.

Поле знака во всех форматах представлено одним разрядом, причем 0 показывает положительное число, а 1 - отрицательное. При переходе от положительных чисел к отрицательным изменяется только знаковый разряд, дополнительный код не применяется.

Нуль в формате с плавающей запятой изображается числом, содержащим все нули в полях порядка и мантиссы. Следовательно, в этом формате имеются два нуля: +0 и -0.

Поле мантиссы имеет следующий вид:

Х,ХХХ…Х где Х=0 или 1

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

1,ХХХ…Х

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

Поле порядка определяет степень числа 2, на которую нужно умножить мантиссу для получения числа с плавающей запятой. Чтобы иметь отрицательные порядки в поле порядка указывается сумма истинного порядка и положительной константы, которая называется смещением. Для одинарной точности смещение равно 127, для двойной точности – 1023 и для расширенной точности – 16383.

В формате одинарной точности длина поля порядка равна 8 разрядам, при помощи которых можно отобразить максимальное целое число 255. Следовательно, наибольший истинный порядок равен 128, а наименьший 0-127= -127. Наибольший и наименьший порядки зарезервированы для обработки ошибок, поэтому фактически наибольший допустимый истинный порядок равен 127, а наименьший -126. Аналогичные рассуждения относятся к числом с двойной и расширенной точностью.

Диапазоны чисел с плавающей запятой выглядят следующим образом. В формате с одинарной точностью наименьшее отрицательное число равно -3,37х1038, наибольшее отрицательное число -1,17х10-38, наименьшее положительное число 1,17х10-38 и наибольшее положительное число 3,37х1038.

В формате с двойной точностью наименьшее отрицательное число равно -1,67х10308, наибольшее отрицательное число -2,23х10-308, наименьшее положительное число 2,23х10-308 и наибольшее положительное число 1,67х10308.

В формате с расширенной точностью наименьшее отрицательное число равно -1,2х104932, наибольшее отрицательное число -3,37х10-4932, наименьшее положительное число 3,37х10-4932 и наибольшее положительное число 1,2х104032.

    1. ОСОБЫЕ СЛУЧАИ

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

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

Особый случай численного антипереполнения возникает, когда ненулевой результат по абсолютной величине слишком мал для представления, т.е. когда он слишком близок к нулю. Примером служит результат деления 1,0 на наибольшее число с расширенной точностью. Другим примером является преобразование наименьшего положительного числа с расширенной точностью в число с двойной точностью.

Особый случай деления на нуль возникает, когда ненулевое число делится на нуль.

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

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

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

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

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

Соседние файлы в папке 12-12-2013_11-21-32