Погрешность выполнения арифметических операций
Выбор длины разрядной сетки и формы представления чисел тесно связан с точностью получаемых при арифметических операциях результатов. При выполнении операций над числами с фиксированной запятой можно считать, что результат точен (при условии отсутствии переполнения).
При выполнении операций над числами, представленными в форме с плавающей запятой, требуется выравнивание порядков. Это может приводить к потере некоторых разрядов мантиссы.
Рассмотрим арифметические операции над операндами, заданными с абсолютными погрешностями: А=[A]+∆A и B=[B]+∆B.
A+B=[A]+[B]+(∆A+∆B),
где абсолютная погрешность суммы ∆(A+B)=∆A+∆B.
A-B=[A]-[B]+(∆A-∆B),
где абсолютная погрешность разности ∆(A-B)=∆A-∆B.
A×B=[A][B]+[A]∆B+[B]∆A+∆A∆B.
Произведением ∆A∆B можно пренебречь, следовательно,
A×B≈[A][B]+[A]∆B+[B]∆A,
то есть абсолютная погрешность произведения ∆(AB)≈[A]∆B+[B]∆A.
При выполнении операции деления
абсолютная погрешность частного ∆(A/B)=∆A/[B]-[A]∆B/([B])2.
Округление
Речь идет об округлении только дробных чисел, целые не округляются. Так как в ЭВМ используются числа с конечным числом разрядов, а также часто выполняются операции приведения данных одной размерности к данным другой, то операция округления выполняется достаточно часто.
В общем виде число с плавающей запятой, размещенное в разрядной сетке размерностью k, имеет вид Ar=mark . Если для записи мантиссы используются только n разрядов, то число может быть представлено в виде двух частей: Ar=[ma]rn+[A0]rk-n, где [A0]rk-n=A0 – часть числа, не вошедшая в разрядную сетку размерностью k.
В зависимости от того, как учитывается А0 при записи числа А в n–раз-рядную сетку, можно выделить несколько способов округления чисел.
1. Отбрасывание А0. При этом возникает относительная погрешность
õокр=|А0|rk-n/(|mA|rn), так как r -1≤ |mA| <1, 0≤ |A0| <1, то õокр=r--(n-1).
2. Симметричное округление. При этом производится анализ величины А0:
При условии |А0|≥r-1 единица добавляется к младшему разряду мантиссы. Данный способ округления наиболее часто используется на практике.
3. Округление по дополнению. В этом случае для округления используется (n+1)-й разряд. Если в нем находится единица, то она передается в n-й разряд, иначе разряды начиная с (n+1)-го отбрасываются.
4. Случайное округление. Генератор случайных чисел формирует нулевое или единичное значение, посылаемое в младший разряд мантиссы.
Оценка точности вычислений зависит как от вида выполняемых операций, так и от последовательности их следования друг за другом.
Нормализация чисел
Число называется нормализованным, если его мантисса удовлетворяет условию r -1 ≤ |MA|<1.
Нормализация – процесс, относящийся к числам, записанным в форме с плавающей запятой. Число A =0,00101…1 – денормализованное (признак нарушения нормализации вправо). Для нормализации число нужно сдвинуть в сторону, противоположную направлению нарушения нормализации. Таким образом, в примере мантиссу числа А необходимо сдвинуть влево на два разряда. При этом порядок необходимо уменьшить на два. Различают два вида сдвигов: простой и модифицированный.
Простой сдвиг – сдвиг, выполняемый по правилу:
Исходная комбинация | Сдвиг влево | Сдвиг вправо |
0,a1a2….an | a1,a2….an0 | 0,0a1a2….an-1 |
1,a1a2….an | a1,a2….anα | 0,1a1a2….an-1 |
Модифицированный сдвиг - сдвиг, при котором в сдвигаемый разряд заносится значение, совпадающее со значением знакового разряда.
Исходная комбинация | Сдвиг влево | Сдвиг вправо |
00,a1a2….an | 0a1,a2….an0 | 00,0a1a2….an-1 |
01,a1a2….an | 1a1,a2….an0 | 00,1a1a2….an-1 |
10,a1a2….an | 0a1,a2….anα | 1,1a1a2….an-1 |
11,a1a2….an | 1a1,a2….anα | 1,1a1a2….an-1 |
Нарушение нормализации вправо может быть более глубоким при вычитании, например, одного числа из другого, если они близки по величине.
Дата добавления: 2016-01-09; просмотров: 1150;