Э. Таненбаум - Архитектура компьютера (1127755), страница 190
Текст из файла (страница 190)
Целью было не только дать возможность переносить данные с одного компьютера на другой, но и обеспечить разработчиков аппаратного обеспечения заведомо правильной моделью. В результате в 1985 г, вышел стандарт 1ЕЕЕ 754. В настоящее время большинство процессоров (в том числе 1пге1, БРАКС и ) Ъ'М) содержат команды с плава1ощей точкой, которые соответствуют этому стандарту. В отличие от многих стандартов, ставших плодом неудачных компромиссом и мало кого устраивавших, этот стандарт неплох, причем в значительной степени благодаря тому, что его изначально разрабатывал один человек, профессор математики университета Беркли Вильям Каган (Ътг)111аш КаЬап). Рассмотрим этот стандарт. Стандарт 1ЕЕЕ 754 определяет три формата: с одинарной точностью (32 бита), с удвоенной точностью (64 бита) и с повышенной точностью (80 бит).
Формат с повышенной точностью предназначен для уменыпения ошибки округления. Он применяется главным образом в арифметических устройствах с плавающей точкой, поэтому мы не будем о нем говорить. В форматах с одинарной и удвоенной точностью используются основание степени 2 для мантисс и сме|ценная экспонента. Форматы представлены на рис. Б.З. гз Биты 1 8 Знак 82 Биты 1 11 Рис.
Б.З. Форматы стандарта )ЕЕЕ с плавающей точкой: одинарная точность (а); удвоенная точность(б) Оба формата начинаются со знакового бита для всего числа; 0 указывает на положительное число, 1 — на отрицательное. Затем следует смещенная экспонента. Для формата одинарной точности смещение равно 127, а для формата удвоенной точности — 1023. Минимальная (О) и максимальная (255 и 2047) 750 Приложение Е. Числа с плавающей точкой Таблица Б.2.
Характеристики чисел с плавающей точкой стандарта 1ЕЕЕ Одинарная точность Удвоенная точность Количество битов в знаке Количество битов в экспоненте Количество битов в мантиссе Общее число битов Смещение экспоненты Область значений экспоненты Самое маленькое нормализованное число Самое большое нормализованное число Диапазон десятичных дробей 52 23 64 32 Смещение 1023 Смещение 127 От -126 дО 4127 2-12б От -1022 до +1023 2-1022 Приблизительно 2'22 Приблизительно 2'224 Приблизительно от 10-збб до 10збб Приблизительно от 10-22 до 10зб Самое маленькое ненормализованное число Приблизительно 10 42 Приблизительно 10 224 Традиционные проблемы, связанные с числами с плавающей точкой, — переполнение, потеря значимости и неинициализированные числа.
Подход, используемый в стандарте 1ЕЕЕ, отчасти заимствован у машины СПС 6600. Помимо нормализованных чисел в стандарте предусмотрено езце 4 типа чисел (рис. Б.4). Проблема возникает в том случае, если абсолютное значение (модуль) результата меньше самого маленького нормализованного числа с плавающей точкой, которое можно представить в этой системе. Раньше аппаратное обеспечение действовало одним из двух способов: либо устанавливало результат на О, либо вызывало ошибку потери значимости.
Ни один из этих двух способов не является удовлетворительным, поэтому в стандарт 1ЕЕЕ введены ненормализованные экспоненты не используются для нормализованных чисел. У них есть специальное предназначение, о котором мы поговорим позже. В конце идут мантиссы по 23 и 52 бита соответственно. Нормализованная мантисса начинается с двоичной точки, за которой следует 1 бит, а затем — остаток мантиссы. Следуя практике, начатой с компьютера РПР-11, компьютерщики осознали, что 1 бит перед мантиссой сохранять не нужно, а нужно просто считать, что он там есть. Следовательно, стандарт определяет мантиссу следующим образом.
Она состоит из неявного бита, который всегда равен 1, и неявной двоичной точки, за которыми идут 23 или 52 произвольных бита. Если все 23 или 52 бита мантиссы равны О, то мантисса имеет значение 1,0. Если все биты мантиссы равны 1, то числовое значение мантиссы немного меньше, чем 2,0. Во избежание путаницы в английском языке для обозначения комбинации из неявного бита, неявной двоичной точки и 23 или 52 явных битов вместо термина мантисса (шап11зза) используется термин значащая часть числа (зздшйсалб)).
Значащая часть числа (з) всех нормализованных чисел лежит в диапазоне 1 < з < 2. Числовые характеристики стандарта 1ЕЕЕ для чисел с плавающей точкой даны в табл. Б.2. В качестве примеров рассмотрим числа 0,5, 1 и 1,5 в нормализованном формате с одинарной точностью. Они представлены шестнадцатеричными числами ЗГ000000, ЗР800000 и ЗЕСООООО соответственно.
Стандарт 1ЕЕЕ 754 751 числа. Эти числа имеют экспоненту 0 и мантиссу, представленную следующими 23 или 52 битами. Неявный бит 1 слева от двоичной точки превращается в О. Не- нормализованные числа можно легко отличить от нормализованных, поскольку у последних не может быть нулевой экспоненты. Нормализованное в О < Е„< Мв„ число Любой набор битов Ненормализованное число Любой ненулевой набор битов Нуль Бесконечность а 1 1 1...1 Любой ненулевой набор битов Не число 1 1 1... 1 Знаковый бит Рис.
Б.4. Числовые типы стандарта!ЕЕЕ Самое маленькое нормализованное число с одинарной точностью содержит 1 в экспоненте и 0 в мантиссе и представляет 1,0 х 2чзз. Самое большое ненормализованное число содержит 0 в экспоненте и все единицы в мантиссе и представляет примерно 0,9999999 х 2-ют, то есть почти то же самое число. Следует отметить, что это число содержит только 23 бита значимости, а все нормализованные числа — 24 бита. По мере уменьшения результата при дальнейших вычислениях экспонента по-прежнему остается равной О, а первые несколько битов мантиссы превращаются в нули, что уменьшает и значение, и число значимых битов мантиссы. Самое маленькое ненулевое ненормализованное число содержит 1 в крайнем правом бите, а все остальные биты равны О.
Экспонента представляет 2 пт, а мантисса — 2 'з, поэтому значение равно 2 "с. Такая схема предусматривает постепенное исчезновение значимых разрядов, а не перескакивает на О, когда результат не удается выразить в виде нормализованного числа. В этой схеме присутствует два нуля, положительный и отрицательный, определяемые по знаковому биту. Оба имеют экспоненту 0 и мантиссу О. Здесь тоже бит слева от двоичной точки по умолчанию равен О, а не 1. Простого решения проблемы переполнения нет. Для этого существует специальное представление бесконечности: с экспонентой, содержащей все единицы, и мантиссой, равной О. Это число можно использовать в качестве операнда. Оно подчиняется обычным математическим правилам для бесконечности.
Например, бесконечность и любое число в сумме дают бесконечность. Конечное число, деленное на бесконечность, равно О. Любое конечное число, разделенное на О, стремится к бесконечности. А что получится, если бесконечность разделить на бесконечность? Результат не определен. Для такого случая существует другой специальный формат — не число (1чоГ а МшпЬег, ХаХ). Его тоже можно использовать в качестве операнда. 752 Приложение Б.
Числа с плавающей точкой Вопросы и задания Преобразуйте следующие числа в формат стандарта 1ЕЕЕ с одинарной точно- стью. Результаты представьте в восьми шестнадцатеричных разрядах. 1) 9; 2) 5/32; 3) -5/32; 4) 6,125. Преобразуйте следующие числа с плавающей точкой одинарной точности из шестнадцатеричной в десятичную систему счисления: 1) 42Е28000Н; 2) ЗР880000Н; 3) 00800000Н; 4) С7РОООООН. Числа с плавающей точкой в формате одинарной точности в 1ВМ/370 состоят из 7-разрядной смещенной экспоненты (смегцение равно 64), 24-разрядной мантиссы и знакового бита. Двоичная точка находится слева от мантиссы. Основание степени — 16. Порядок полей — знаковый бит, экспонента, мантисса.
Выразите число 7/64 в виде нормализованного шестнадцатеричного числа в этой системе. Следующие двоичные числа с плавающей точкой состоят из знакового бита, смещенной экспоненты (смещение равно 64) с основанием 2 и 16-разрядной мантиссы. Нормализуйте их: 1) 0 1000000 0001010100000001; 2) 0 0111111 0000001111111111; 5. 6. 3) 0 1000011 1000000000000000.
Чтобы сложить два числа с плавающей точкой, нужно уровнять экспоненты (сдвинув мантиссу). Затем можно сложить мантиссы и нормализовать результат, если в этом есть необходимость. Сложите числа одинарной точности ЗЕЕОООООН и 30800000Н и выразите нормализованный результат в шестнадцатеричной системе счисления, Компьютерная компания решила выпустить машину, поддерживающую 16-разрядные числа с плавающей точкой.
В модели 0.001 формат состоит из знакового бита, 7-разрядной смещенной экспоненты (смещение равно 64) и 8-разрядной мантиссы. В модели 0.002 формат состоит из знакового бита, 5-разрядной смещенной экспоненты (смещение равно 16) и 10-разрядной мантиссы. В обеих моделях основание степени равно 2. Каково самое маленькое и самое большое положительное нормализованное число в этих моделях? Сколько десятичных разрядов точности содержится в каждой модели? А вы купили бы какую-нибудь из этих двух моделей? Вопросы и задания 753 7. Существует одна ситуация, при которой операция над двумя числами с плавающей точкой может вызвать радикальное сокращение количества значимых битов в результате.