Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
10
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

Особенности выполнения арифметических операций над вещественными числами*

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

Операции умножения и деления

При умножении и делении вещественных чисел процессор выполняет следующие действия:

  • находит произведение (или частное от деления) мантисс

  • вычисляет сумму (разность) порядков операндов

  • нормализует мантиссу результата, если это необходимо

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

Операции сложения и вычитания

При сложении и вычитании вещественных чисел процессор выполняет следующие действия:

  • выравнивание мантисс, т.е. сдвиг мантиссы числа с меньшим порядком на число разрядов, равное разности порядков

  • вычисляет сумму (разность) мантисс операндов

  • определяет порядок результата как больший из порядков операндов

  • нормализует мантиссу результата, если это необходимо

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

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

  • ошибки округления – «выход» значения мантиссы за разрядную сетку (в случае произведения мантисса содержит больше разрядов, чем допустимо внутренним представлением данных соответствующего типа, поэтому часть младших разрядов произведения в память не записывается; при делении операция выполняется до получения нулевого промежуточного частного или до заполнения бит мантиссы результата);

  • ошибки переполнения – «выход» значения порядка за разрядную сетку;

  • машинный нуль – получение числа с ненулевой мантиссой и порядком меньшим, чем минимальный порядок в данном типе; иногда для характеристики такой ситуации употребляют выражение «обособленное представление 0»;

  • катастрофическая потеря порядка, к которой приводит в ряде случаев ситуация появления «машинного нуля»;

  • потеря значащих цифр.

Указанные особые ситуации нужно отслеживать и специально обрабатывать в программе.

Особые ситуации Ошибки округления

Пусть для представления вещественного числа выделено 3 разряда под мантиссу и 2 под порядок. Тогда при умножении двух чисел 0.123*1002 и 0.161*1005 имеем:

0.123*1002 * 0.161*1005 = 0.019803*1007 = 0.198*1006 = 198000 (вместо ожидаемого 198030), т.е. имеем ошибку округления.

Как следствие, надо помнить, что для вещественных чисел X и Y значения выражений X и X*Y/Y не равны. Например:

0.111*1000*0.223*1001/0.223*1001=0.025*1001/0.223*1001=0.25*1000/0.223*1001= 1.121*10-01 = 0.112*1000.

Ошибки переполнения

Пусть для представления вещественного числа выделено 3 разряда под мантиссу и 2 под порядок.

Тогда при сложении двух чисел 0.999*1098 и 0.976*1099 имеем:

0.999*1098 + 0.976*1099 = 0.099(9)*1099 + 0.976*1099 = 0.100*1099 + 0.976*1099 = 1.076*1099 = 0.108*10100 = 0.108*10** т.к. числа сначала приводятся к одинаковому – большему порядку, затем производится сложение мантисс и после этого повторная нормализация, при которой значение нового порядка 100 выходит за отведенные ему 2 разряда, т.е. имеем ошибку переполнения.

Тогда при умножении двух чисел 0.823*1046 и 0.101*1065 имеем:

0.823*1046 * 0.101*1065 = 0.83123*10** , т.к. значение порядка 111 выходит за отведенные ему 2 разряда, т.е. имеем ошибку переполнения.