Особенности реализации вещественной компьютерной арифметики.
Когда говорят о точности представления вещественных чисел в компьютере, надо помнить следующее: десятичное число, имеющее даже всего одну значащую цифру после запятой, вообще говоря, невозможно представить точно в формате с плавающей запятой. Объясняется это тем, что конечные десятичные дроби часто оказываются бесконечными периодическими двоичными дробями. Так 0,110 = 0,0(0011)2, а значит, и в нормализованном виде такое двоичное число будет иметь бесконечную мантиссу и не может быть представлено точно. При записи подобной мантиссы в ячейку компьютера число не усекается, а округляется. Если под мантиссу отведено п разрядов и (n+1)-я значащая цифра двоичной нормализованной мантиссы равна 0, то цифры, начиная с (n+1)-й, просто отбрасываются, если же (n+1)-я цифра равна единице, то к целому числу, составленному из первых п значащих цифр мантиссы, прибавляется единица.
Пример. Рассмотрим, как будет выглядеть запись мантиссы (т) числа а = 0,110 при двоичной нормализации для различного количества бит (n), отведенных под мантиссу. а = 0,110 = 0,0(0011)2 = 0,11(0011)2 × 2-3, т. е. мантисса в нормализованном числе есть 0,11(0011)2. При n = 10 m = 1100110011 (остальные цифры мантиссы отброшены в результате округления). При n = 12 m = 110011001101 (последняя цифра изменилась с 0 на 1 при округлении). При n = 13 m = 1100110011010 (две последние цифры изменились при прибавлении 1).
Опишем ситуации, приводящие к неточности вычислений, которые могут возникнуть при операциях сложения и вычитания в вещественной компьютерной арифметике.
1). Потеря значащих цифр мантиссы у меньшего из чисел при выравнивании порядков. При сложении и вычитании вещественных чисел в худшем случае утерянными оказываются все значащие цифры меньшего числа, и a±b=a, что является абсурдным с точки зрения математики, но возможным в компьютерной арифметике с ограниченным числом разрядов (см. пример 12).
2). Потеря крайней справа значащей цифры результата при сложении или вычитании. При сложении и вычитании двух чисел количество значащих цифр может увеличиться лишь на одну, это влияет на точность, но не на правильность результата. Так, при сложении пятнадцатиразрядных мантисс 0,1111100000111112 + 0,1001001001001002 = = 1,1000101010000112, количество значащих цифр стало равным 16, и после округления и нормализации результат будет выглядеть так: 0,110001010100010 × 21.
Гораздо хуже обстоит дело при вычитании близких по модулю и имеющих одинаковый знак чисел (или сложении чисел разного знака). В этом случае достоверной может остаться всего одна значащая цифра, а остальные цифры нормализованной мантиссы (скорее всего нули) окажутся недостоверными. Пусть требуется вычислить разность чисел 0,(0011)2 и 0,0011001100112. Произведем вначале вычитание «на бумаге». Представим первую дробь (она периодическая) в виде 0,001100110011(0011)2. Перед периодом выписали 12 цифр, так как вторая дробь содержит 12 значащих цифр. Произведем вычитание и получим: 0,000000000000(0011)2 = 0,(1100)2 × 2-14. Переведем периодическую дробь в десятичную систему счисления и получим 0,8 × 2-14. При выполнении этой же операции вычитания в компьютере при условии, что под мантиссу отведено 12 разрядов, получим: 0,1100110011012 × 2-2 - 0,11001100112 × 2-2 = 0,12 × 2-13 = 1 × 2-14, т. е. уже старшая значащая цифра результата оказалась неверной
3). Выход за границу допустимого диапазона значений при нормализации результата. Данная ситуация возникает в случае, когда порядок результата оказывается либо больше максимально возможного значения, либо меньше минимально возможного. Такую ситуацию различные компиляторы и операционные системы обрабатывают по-разному, но чаще всего выполнение программы прерывается с сообщением об ошибке «арифметическое переполнение». Выполним сложение 0,12 × 2127 + 0,12 × 2127 = 0,12 × 2128, и если максимальный представимый порядок равен 127, результат оказывается не представимым.
4). Получение «не представимого». Данная ситуация соответствует описанному выше «арифметическому переполнению»; однако в 80-разрядном представлении вещественных чисел (а именно он является основным в современных персональных компьютерах) диапазон допустимых порядков достаточно велик, чтобы производить практические любые вычислительные работы, и возникновение подобной ошибки скорее всего означает, что программа составлена неверно.
5). Потеря младших значащих цифр результата. Во-первых, при перемножении двух n -значных мантисс может получиться число, состоящее из 2n значащих цифр, только половина из которых будет сохранена в результате. При операции деления количество цифр в частном может оказаться бесконечным и лишь первые п из них будут сохранены. Во-вторых, при операции умножения возможна потеря n- младшей значащей цифры результата при сдвиге мантиссы на один разряд влево. Самый правый разряд мантиссы при этом заполняется нулем, а не очередной значащей цифрой результата перемножения мантисс, с одновременным уменьшением порядка результата на единицу. Для операции же деления может понадобиться сдвиг вправо вместе с увеличением порядка результата на единицу.
Таким образом, у вещественной арифметики есть несколько потенциально опасных особенностей. Все они имеют общее происхождение, а именно, тот факт, что мантисса и порядок в представлении с плавающей запятой занимают фиксированное число разрядов.
Подведем итог всему сказанному о компьютерной вещественной арифметике:
а) уже на стадии записи чисел в компьютер возникают ошибки округления, которые при выполнении арифметических действий нарастают;
б) наличие погрешностей округления приводит к следующему правилу программирования: неразумно сравнивать в программе два вещественных числа на точное равенство (вместо сравнения на равенство правильнее требовать, чтобы модуль разности сравниваемых чисел не превосходил некоторого числа ɛ, соответствующего абсолютной погрешности представления);
в) в результате вычитания возникают недостоверные значащие цифры, которые могут привести к серьезной потере точности или получению неправильного результата;
г) прибавление или вычитание малого числа может никак не сказаться на результате;
д) получение очень больших чисел может вызвать переполнение порядка, а очень малых — отрицательное переполнение, или исчезновение числа (превращение в нуль), это может привести к аварийному завершению программы.
Вопросы.
1. Запишите следующие десятичные числа в нормализованном виде:
а) 217,934; в) 10,0101; б) 75321; г) 0,00200450.
2. Приведите к нормализованному виду следующие числа, используя в качестве Р основания их систем счисления:
а) —0,0000010111012;
б) 98765432Ю10;
в) 123456789,ABCD16.
3. Сравните следующие числа:
а) 318,4785 × 109 и 3,184785 × 1011;
б) 218,4785 × 10-3 и 21847,85 × 10-4;
в) 0,11012 × 22 и 1012 × 2-2.
4. Сравните диапазон представления чисел с плавающей запятой в 32-разрядном формате (24 разряда для мантиссы и 6 разрядов для модуля порядка) с диапазоном представления чисел с фиксированной запятой в том же формате.
5. Каковы преимущества компьютерного представления чисел с плавающей запятой по сравнению с их представлением с фиксированной запятой, которое мы чаще всего используем в повседневной жизни?
6. Произведите следующие арифметические действия над десятичными нормализованными числами согласно праилам вещественной компьютерной арифметики (в мантиссе должно быть сохранено 6 значащих цифр):
а) 0,397621 х 103 + 0,237900 х 101;
б) 0,982563 х 102 - 0,745623 х 102;
в) 0,235001 х 102 • 0,850000 х 103;
г) 0,117800 х Ю2 : 0,235600 х 103.
При выполнении этого задания следует нормализовать мантиссу результата соответствующего арифметического действия, а затем округлить ее
7. Выполните действие над машинными кодами чисел с плавающей запятой в 32-разрядном формате: X =А + В, где А = 125,75 и В = -50.
8. Перечислите и объясните все ошибки, которые могут возникать при арифметических операциях с нормализованными числами в ограниченном числе разрядов.
- Представление информации в компьютере. Представление информации в компьютере.
- 1. Представление целых чисел.
- 1.1. Представление целых положительных чисел.
- Вопрос 1. Можно ли в 8-ми разрядной ячейки представить со знаком число 200?
- 1.2. Представление целых отрицательных чисел.
- Алгоритм получения дополнительного k-разрядного кода отрицательного числа
- Особенности реализации арифметических операций в конечном числе разрядов.
- 2. Представление вещественных чисел.
- Представление вещественных чисел в формате с плавающей точкой
- Выполнение арифметических операций над вещественными числами.
- Особенности реализации вещественной компьютерной арифметики.
- 3. Представление текстовой информации.
- 4. Представление графической информации.
- Общие подходы к представлению в компьютере информации естественного происхождения.
- Векторное и растровое представление графической информации.
- Квантование цвета.
- Цветовая модель rgb.
- Цветовая модель cmyk.
- Цветовая модель hsb.
- 5. Представление звуковой информации.
- Понятие звукозаписи.
- Импульсно – кодовая модуляция.
- Формат midi.
- Принципы компьютерного воспроизведения звука.
- 6. Методы сжатия цифровой информации.
- 6.1. Алгоритмы обратимых методов.
- Метод упаковки
- Алгоритм Хаффмана
- Алгоритм построения дерева Хаффмана
- Алгоритм rle
- Алгоритмы Лемпеля-Зива.
- 6.2. Методы сжатия с регулируемой потерей информации.
- Алгоритм jpeg
- Алгоритм мрз
- Алгоритмы mpeg
- Выводы.