Выполнение арифметических операций над вещественными числами.
Использование в компьютере представления чисел в формате с плавающей запятой усложняет выполнение арифметических операций.
При сложении и вычитании чисел сначала производится подготовительная операция, называемая выравниванием порядков. Она состоит в том, что мантисса числа с меньшим порядком сдвигается в своей ячейке вправо на количество разрядов, равное разности порядков данных чисел. После этой операции одноименные разряды мантисс оказываются расположенными в одноименных разрядах обеих ячеек, и теперь уже сложение или вычитание мантисс выполняется достаточно просто, так же как над числами с фиксированной запятой.
Пусть a = ±0,ma × 2q(a), b = ±0,mb × 2q(b) — два нормализованных двоичных числа, и q(a)>q(b). Результатом их сложения или вычитания будет являться следующее выражение: c = (0,ma ±0,mb × 2q(a)-q(b)) ×2q(a).
После операций над порядками и мантиссами мы получаем порядок и мантиссу результата, но последняя, вообще говоря, может не удовлетворять ограничениям, накладываемым на мантиссы нормализованных чисел. Так как от результата арифметических операций в компьютере требуется, чтобы он также был нормализованным числом, необходимо дополнительное преобразование результата — нормализация. В зависимости от величины получившейся мантиссы результата, она сдвигается вправо или влево так, чтобы ее первая значащая цифра попала в первый разряд после запятой. Одновременно порядок результата увеличивается или уменьшается на число, равное величине сдвига.
Над мантиссами в арифметическом устройстве могут выполняться все четыре арифметических действия, а также операции сдвига, тогда как над порядками производятся только действия сложения и вычитания. Отрицательные порядки можно записывать в дополнительном коде для того, чтобы операцию вычитания свести к операции сложения.
В ряде случаев, даже если некоторые два числа были представлены в формате с плавающей запятой абсолютно точно, результат выполнения над ними арифметических операций часто может содержать погрешность, а иногда может быть заведомо неверным.
Поясним более подробно особенности выполнения арифметических операций над вещественными числами на примерах. При этом будем считать, что в записи вещественного числа с плавающей запятой один разряд отводится под десятичный порядок и пять разрядов — под десятичную мантиссу.
Пример: Предположим, что требуется сложить следующие числа: 0,23619 × 102 и 0,71824 × 10-1. Так как порядки у чисел различны, то перед сложением производится выравнивание порядков. Число с меньшим порядком преобразуется в число с порядком, равным порядку другого слагаемого (меньший порядок «приводится» к большему). В данном случае второе слагаемое будет преобразовано к виду 0,00071824 × 102, после чего выполняется сложение 102 × (0,23619 + 0,00071824) = 102 × 0,23690824 Результат получили с большим числом разрядов, чем вмещает ячейка, поэтому он округляется и записывается в памяти в виде 0,23691 × 102.
Пример. Выполним сложение двух вещественных чисел: 0,23619 × 108 и 0,91824 × 108. Так как порядки у этих чисел одинаковы, то производить операцию выравнивания порядков не требуется. Операция сложения сводится к сложению мантисс. Результат — ненормализованное число 1,15443 × 108. Требуется выполнить нормализацию путем сдвига мантиссы вправо на один разряд, а затем округление результата, так как в мантиссе будет уже шесть цифр, а в ячейке памяти под мантиссу отведено их только пять. Ответ: 0,11544 × 109.
Пример. Выполним сложение двух вещественных чисел, одно из которых достаточно большое по сравнению со вторым: 0,23619 × 103 и 0,91824 × 10-3. Так как порядки у этих чисел различны, то требуется произвести предварительную операцию их выравнивания. После выполнения выравнивания порядков складываться будут следующие числа:
103 × 0,23619 + 103 × 0,00000091824 = 103 × 0,23619091824
После сложения в мантиссе оказалось более пяти значащих цифр и при записи в ячейку памяти произойдет округление результата до 0,23619 × 103 . Получившееся число равно первому слагаемому, т. е. при выравнивании порядков все значащие цифры мантиссы второго слагаемого потеряны. Таким образом, мы получили результат, невозможный с точки зрения обычной математики: a + b = a при b>0. Но в компьютерной арифметике с ограниченным числом разрядов такой результат возможен, и об этом необходимо помнить при составлении алгоритмов решения задач.
При умножении двух целых чисел с плавающей запятой их порядки необходимо просто сложить, а мантиссы — перемножить (предварительное выравнивание не производится). При делении из порядка делимого надо вычесть порядок делителя, а мантиссу делимого разделить на мантиссу делителя. Результатами выполнения операций умножения и деления нормализованных чисел а и b в арифметике с ограниченным числом разрядов будут:
Пример. Выполним умножение двух вещественных чисел: 0,23000 × 103 и 0,95000 × 107. При умножении двух вещественных чисел в представлении с плавающей запятой порядки складываются, а мантиссы перемножаются. В результате получим: 0,21850 × 1010. Это число не умещается в отведенный формат — в нашем формате под порядок отводится один разряд, а в получившемся числе порядок содержит две цифры. Выполнение операции умножения над этими числами приведет к прекращению выполнения программы в связи с ошибкой «переполнение порядка».
Пример. Выполним деление двух вещественных чисел: 0,92000 × 104 и 0,30000 × 107. При делении вещественных чисел в представлении с плавающей запятой порядки вычитаются, а мантиссы делятся одна на другую. В нашем примере при делении мантисс мы имеем бесконечную периодическую дробь 0,92:0,3 = 3,0(6). Следовательно, при записи мантиссы результата произойдет ее округление. После нормализации результат будет иметь вид: 0,30667 × 10-2.
- Представление информации в компьютере. Представление информации в компьютере.
- 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
- Выводы.