Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров_1 / 4_Представление информации в компьютере.doc
Скачиваний:
42
Добавлен:
20.03.2015
Размер:
340.48 Кб
Скачать

4.3.2. Арифметические операции над числами с плавающей запятой

Этот раздел посвящен правилам сложения, вычитания, умножения и деления чи­сел в формате с плавающей запятой, определенном стандартом IEEE. Указанные правила регулируют только базовые шаги при выполнении операций. А вот, на­пример, возможность переполнения или потери значимости в них не учтена. Бо­лее того, для промежуточных значений мантиссы и порядка может потребоваться более 24 и 8 бит соответственно. Эти и другие особенности операций с плаваю­щей запятой нужно принимать к сведению в процессе разработки арифметиче­ских устройств, соответствующих стандарту IEEE. Все особенности мы, конечно, не рассмотрим, но о важнейших, таких как округление, поговорим обязательно.

Если порядок двух операндов с плавающей запятой различен, их мантиссы пе­ред сложением или вычитанием должны быть сдвинуты относительно друг друга. В качестве примера рассмотрим сложение чисел 2,9400 х 102 и 4,3100 х 104. Пред­ставим 2,9400 х 102 как 0,0294 х 104 и сложим мантиссы, вследствие чего получим 4,3394 х 104. Последовательность операций при сложении и вычитании можно описать следующим образом.

Правило сложения и вычитания

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

2. Установить порядок результата равным большему порядку операндов.

3. Выполнить сложение/вычитание мантисс и определить знак результата.

4. Нормализовать результат в случае необходимости.

Умножение и деление чисел с плавающей запятой даже проще их сложения и вычитания — для выполнения этих операций выравнивать мантиссы не требуется.

Правило умножения

1. Сложить порядки операндов и вычесть из результата значение 127.

2. Перемножить мантиссы и определить знак результата.

3. В случае необходимости нормализовать результат.

Правило деления

1. Вычесть порядок делителя из порядка делимого и прибавить к результату значение 127.

2. Разделить мантиссы и определить знак результата.

3. В случае необходимости нормализовать результат.

Прибавление или вычитание 127 при умножении и делении выполняется по­тому, что порядки чисел представлены в формате с избытком 127.

4.3.3. Точность вычислений. Разряды защиты и усечение

Реализация описанных алгоритмов имеет ряд важных особенностей, обзор кото­рых дан в настоящем разделе. Хотя размер мантисс исходных операндов и конеч­ного результата ограничен 24 разрядами, включая подразумеваемую ведущую 1, важно, чтобы в ходе промежуточных вычислений сохранялось несколько допол­нительных разрядов, называемых разрядами защиты или сторожевыми разряда­ми. Это позволяет обеспечить необходимую точность конечного результата.

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

Существует несколько способов усечения. Простейший из них заключается в удалении разрядов защиты без изменения остальных разрядов. Такая операция называется усечением. Предположим, что необходимо сократить дробное значение с шести разрядов до трех. Любые значения, лежащие в диапазоне от 0,b-1b-2b-3000 до 0,b-1b-2b-3111, усекаются до 0,b-1b-2b-3. Ошибка усечения до 3-разрядного ре­зультата находится в диапазоне 0 − 0,000111, то есть от 0 и почти до 1 в младшем из оставшихся разрядов. У нас это разряд b-3. В результате усечения получается сме­щенное приближение, поскольку диапазон ошибки не симметричен нулю.

Еще одним простым методом усечения является фон-неймановское округление. Если все удаляемые разряды содержат нули, последние отбрасываются без изме­нения оставшихся разрядов. Но если хоть один из удаляемых разрядов содержит 1, младший разряд оставшегося значения устанавливается в 1. В нашем примере усечения дробного значения с шести разрядов до трех любые 6-разрядные значе­ния, в которых b-4b-5b-6 не равны 000, укорачиваются до 0,b-1b-21. Величина ошибки этого метода лежит в диапазоне от -1 до +1 младшего из оставшихся раз­рядов. И хотя при таком способе усечения значения диапазон ошибки больше, чем при простом усечении, ее максимальная величина остается той же, а прибли­жение получается несмещенным, так как диапазон ошибки симметричен относи­тельно нуля.

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

Перейдем к следующему методу усечения значения — округлению. Задача ок­ругления состоит в максимальном приближении результирующего значения к ис­ходному. Оно гораздо точнее полученного путем усечения и к тому же дает несме­щенный результат. Округление выполняется так: если старший из удаляемых разрядов содержит 1, к младшему из оставшихся разрядов числа прибавляется 1. Таким образом, 0,b-1b-2b-31- округляется до 0,b-1b-2b-3+0,001, а 0,b-1b-2b-30... — до 0,b-1b-2b-3. Результат получается предельно близким к исходному числу за ис­ключением ситуации, когда удаляемые разряды равны 10...0. В этом случае исход­ное значение лежит посредине между двумя возможными усеченными представле­ниями. Для обеспечения несмещенного приближения можно выбирать значение младшего из оставшихся разрядов таким образом, чтобы всегда получалось бли­жайшее четное значение.

В рассматриваемом примере с использованием 6 разря­дов значение 0,b-1b-20100 округляется до 0,b-1b-20, a 0,b-1b-21100— до 0,b-1b-21+ 0,001. Эту технологию можно описать так: округление до ближайшего числа, а в случае двух одинаковых ошибок округления — до ближайшего четного числа.

Ошибка округления лежит в диапазоне от -1/2 до +1/2 значения младшего из оставшихся разрядов. Очевидно, что это наилучший метод. Однако реализовать его труднее всего, поскольку потребуется дополнительная операция и, возможно, нормализация. Согласно стандарту IEEE, для усечения чисел по умолчанию ис­пользуется округление. В этом стандарте описаны и другие методы усечения; все они определены как режимы округления.

Обсуждая ошибки, возникающие из-за удаления разрядов защиты, мы говори­ли об одной операции усечения. Если программа выполняет длинную последова­тельность вычислений, в которой задействованы числа с плавающей запятой, анализ диапазонов ошибок и конечных результатов значительно усложняется. Этот аспект числовых вычислений мы больше обсуждать не будем, а напоследок еще раз обратимся к стандарту IEEE и посмотрим, как в нём определяются разря­ды защиты и округление.

Результаты одной операции должны вычисляться с точностью до половины единицы в младшем разряде. В общем случае с этой целью результат должен уко­рачиваться путем округления. Для обеспечения такой точности на промежуточ­ных шагах выполнения операции достаточно сохранять три разряда защиты. Пер­вые два — это старшие разряды мантиссы, которые в конце вычислений подлежат удалению. Третий разряд содержит результат выполнения логической операции ИЛИ всех разрядов мантиссы, кроме указанных двух разрядов защиты. Поддер­живать его на промежуточных шагах операции достаточно просто. Он инициали­зируется нулем, а когда в него из мантиссы выдвигается 1,становится равным 1 и сохраняет это значение. Поэтому данный разряд иногда называют вторым проме­жуточным битом округления (sticky bit).