- •Введение
- •Системы счисления и представление данных
- •Числа конечной точности
- •Системы счисления
- •Преобразование чисел из одной системы счисления в другую
- •Правило замещения
- •Правило деления-умножения
- •Правило деления
- •Правило умножения
- •Упрощенные правила
- •Двоичная арифметика
- •Отрицательные двоичные числа
- •Сложение двоичных чисел
- •Числа с плавающей точкой
- •Принципы представления с плавающей точкой
- •Округление чисел
- •Стандарт ieee 754
- •Организация компьютерных систем
- •Архитектура и структура вычислительных машин
- •Языки, уровни и виртуальные машины
- •Компиляция
- •Интерпретация
- •Виртуальные машины
- •Многоуровневые машины
- •Многоуровневая организация компьютеров
- •Уровень 0
- •Уровень 1
- •Уровень 2
- •Уровень 3
- •Уровень 4
- •Уровень 5
- •Аппаратное и программное обеспечение
- •Структура компьютера
- •Организация памяти вычислительных машин
- •Адреса основной памяти
- •Упорядочение байтов
- •Цифровой логический уровень
- •Вентили и булева алгебра
- •Вентили
- •Булева алгебра
- •Реализация булевых функций
- •Основные цифровые логические схемы
- •Интегральные схемы
- •Комбинационные схемы
- •Мультиплексоры
- •Декодеры
- •Компараторы
- •Арифметические схемы Схемы сдвига
- •Сумматоры
- •Арифметико-логические устройства
- •Тактовые генераторы
- •Защелки
- •Синхронные sr-защелки
- •Синхронные d-защелки
- •Триггеры
- •Регистры
- •Организация большого объема памяти
- •Микроархитектурный уровень
- •Пример микроархитектуры: организация
- •Поток управления
- •Последовательный поток управления и переходы
- •Процедуры
- •Модель памяти
- •Набор команд
- •Пример микроархитектуры: управление микрокомандами
- •Тракт данных
- •Синхронизация тракта данных
- •Работа памяти
- •Микрокоманды
- •Управление микрокомандами
- •Уровень архитектуры команд
- •Уровень команд процессора Pentium II
- •Регистры
- •Выравнивание адресов
- •Типы данных
- •Форматы команд
- •Адресация
- •Непосредственная адресация
- •Прямая адресация
- •Регистровая адресация
- •Косвенная регистровая адресация
- •Базовая адресация
- •Индексная адресация
- •Команды процессора Pentium II
- •Команды перемещения
- •Арифметические команды
- •Двоично-десятичные команды
- •Логические команды
- •Команды сдвига/циклического сдвига
- •Команды тестирования/сравнения
- •Команды передачи управления
- •Команды для операций над цепочками
- •Команды управления флаговым регистром
- •Прочие команды
- •Уровень языка ассемблера
- •Формат оператора в языке ассемблера
- •Команды
- •Операнды
- •Комментарии
- •Директивы
- •Макросы
- •Процесс ассемблирования
- •Архитектуры компьютеров параллельного действия
- •Организация конвейерных и параллельных вычислений
- •Конвейеры
- •Параллелизм на уровне процессоров
- •Мультикомпьютеры
- •Классификация вычислительных платформ, типы процессоров
- •Классификация компьютеров параллельного действия
Стандарт ieee 754
До 80-х годов каждый производитель компьютеров имел свой собственный формат чисел с плавающей точкой. Все форматы отличались друг от друга, более того, в некоторых из них арифметические действия выполнялись неправильно, поскольку арифметика с плавающей точкой имеет некоторые тонкости, которые не очевидны для обычного разработчика аппаратного обеспечения.
Чтобы изменить эту ситуацию, в конце 70-х годов IEEE (Institute of Electrical and Electronic Engineers – институт инженеров по электротехнике и электронике, США) учредил комиссию для стандартизации арифметики с плавающей точкой. Целью было не только дать возможность переносить данные с одного компьютера на другой, но и обеспечить разработчиков аппаратного обеспечения заведомо правильной моделью. В результате получился стандарт IEEE 754 (IEEE, 1985). В настоящее время большинство процессоров содержат команды с плавающей точкой, которые соответствуют этому стандарту. В отличие от многих стандартов, которые представляли собой неудачные компромиссы и мало кого устраивали, этот стандарт неплох, в большей степени благодаря тому, что его изначально разрабатывал один человек, профессор математики университета Беркли Вильям Каган (William Kahan).
Стандарт определяет три формата: с одинарной точностью (32 бита), с удвоенной точностью (64 бита) и с повышенной точностью (80 битов) (Рис. 1 .2).
Рис. 1.2. Форматы для стандарта IEEE с плавающей точкой: одинарная точность (а), удвоенная точность (б), повышенная точность (в)
Все форматы начинаются со знакового бита для всего числа: 0 указывает на положительное число, а 1 – на отрицательное.
Затем следует смещенная экспонента, т.е. к ней прибавляется число так, чтобы экспонента всегда была неотрицательной. Для формата одинарной точности прибавляется 127, для формата удвоенной точности смещение – 1023, для повышенной точности – 16383. Всегда неотрицательная экспонента избавляет от необходимости выделять один бит для хранения ее знака и упрощает выполнение операций сравнения экспонент и арифметических операций над ними.
Нормализованная мантисса начинается с двоичной запятой, за которой следует 1 бит, а затем остаток мантиссы. Однако, 1 бит перед мантиссой сохранять не нужно, поскольку можно просто предполагать, что он есть. Следовательно, стандарт определяет мантиссу следующим образом: она состоит из неявного бита, который всегда равен 1, неявной двоичной запятой, за которыми идут 23, 52 или 64 произвольных бита. Если все биты мантиссы равны 0, то мантисса имеет значение 1,0. Если они равны 1, то числовое значение мантиссы немного меньше, чем 2,0.
Существуют традиционные проблемы, связанные с числами в компьютере – это определение их переполнения, потери значимости и инициализации. Для этого в стандарте IEEE помимо нормализованных чисел предусмотрено еще 4 типа чисел (Рис. 1 .3).
Рис. 1.3. Числовые типы стандарта IEEE
Возникает проблема в том случае, если абсолютное значение (модуль) результата меньше самого маленького нормализованного числа с плавающей точкой, которое можно представить в этой системе. Раньше аппаратное обеспечение действовало одним из двух способов: либо устанавливало результат на 0, либо вызывало ошибку из-за потери значимости. Ни один из этих двух способов не является удовлетворительным, поэтому в стандарт IEEE введены ненормализованные числа. Неявный бит 1 слева от двоичной запятой превращается в 0. Ненормализованные числа можно легко отличить от нормализованных, поскольку у последних не может быть экспоненты 0.
В этой схеме присутствуют 2 нуля, положительный и отрицательный, определяемые по знаковому биту. Оба имеют экспоненту 0 и мантиссу 0. Здесь тоже бит слева от двоичной запятой по умолчанию 0, а не 1.
С переполнением нельзя справиться постепенно. Вместо этого существует специальное представление бесконечности: с экспонентой, содержащей все единицы, и мантиссой, равной 0. Это число можно использовать в различных математических выражениях – оно подчиняется обычным математическим правилам для бесконечности. Например, бесконечность и любое число в сумме дают бесконечность. Конечное число разделить на бесконечность равно 0. Любое конечное число, разделенное на 0, стремится к бесконечности.
А что получится, если бесконечность разделить на бесконечность? Результат не определен. Для такого случая существует другой специальный формат, NaN (Not a Number – не число). Его тоже можно использовать в качестве операнда.
Подведем итоги
в вычислительной технике удобнее использовать числа, представленные в нормальной форме;
для однозначного отображения числа используется нормальная нормализованная форма;
вычислительная техника оперирует с числами конечной точности, поэтому результаты различных арифметических операций необходимо округлять;
для стандартизации представления чисел с плавающей точкой был введен стандарт IEEE 754, который может представлять нормализованные числа, ненормализованные, нуль, бесконечность и не числа.
Вопросы для самоконтроля
Вспомните и назовите принципы представления чисел с плавающей точкой. Что такое нормальная нормализованная форма? Зачем она используется?
Что такое округление? Почему оно применяется в вычислительной технике?
Р
Индивидуальные задания
Преобразуйте следующие числа в формат стандарта IEEE с одинарной точностью. Результаты представьте в восьми и шестнадцатеричных разрядах.
9
5/32
-5/32
6,125
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Преобразуйте следующие числа с плавающей точкой одинарной точности из шестнадцатеричной в десятичную систему счисления:
42E28000h
3F880000h
00800000h
C7F00000h
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Число с плавающей точкой в формате одинарной точности в IBM/370 состоит из 7-битной смещенной экспоненты (смещение 64), 24-битной мантиссы и знакового бита. Двоичная запятая находится слева от мантиссы, Основание возведения в степень – 16. Порядок полей – знаковый бит, экспонента, мантисса. Выразите число 7/64 в виде нормализованного шестнадцатеричного числа в этой системе.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Чтобы сложить два числа с плавающей точкой, нужно уровнять экспоненты (сдвинув мантиссу). Затем можно сложить мантиссы и нормализовать результат, если в этом есть необходимость. Сложите числа одинарной точности ЗЕЕ00000h и 3D800000h и выразите нормализованный результат в шестнадцатеричной системе счисления.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Следующие двоичные числа с плавающей точкой состоят из знакового бита, смещенной экспоненты (смещение 63) с основанием 2 и 16-битной мантиссы. Нормализуйте их.
0 1000000 0001010100000001
0 0111111 0000001111111111
0 1000011 1000000000000000
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________