Представление чисел в формате с плавающей точкой Для хранения и обработки вещественных чисел в компьютере используется формат чисел с плавающей точкой. Положение точки может меняться. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка». Содержание Формат чисел с плавающей точкой Способы представления чисел в памяти компьютера Стандарт IEEE 754 Форматы стандарта IEEE Представление мантиссы в стандарте IEEE Представление порядка в стандарте IEEE Смещенный порядок Диапазон изменения чисел Характеристики чисел с плавающей точкой стандарта IEEE Алгоритм представления числа с плавающей точкой Примеры Достоинства формата чисел с плавающей точкой Недостатки формата чисел с плавающей точкой Формат чисел с плавающей точкой Этот способ представления опирается на нормализованную (экспоненциальную) запись действительных чисел: A= mqn , где m – мантисса числа; q – основание системы счисления; n – порядок числа. Мантисса должна отвечать условию: 1 m 1 n Следовательно, мантисса должна быть правильной дробью, имеющей после запятой любую цифру, отличную от нуля: 0,052415 = 0, 52415 * 10-1 550000=0,55 * 106 Способы представления чисел в памяти компьютера При записи числа выделяется определенное количество разрядов для хранения мантиссы, знака мантиссы, порядка и знака порядка: ... знак порядка порядок . . . знак мантиссы мантисса В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. ( пример на след. слайде) Пример представления чисел в форме с плавающей точкой В памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (q =2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке: ± порядок 1 байт мантисса 2 байт 3 байт 4 байт В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 — минус. Стандарт IEEE 754 До 80-х годов каждый производитель поддерживал собственный формат чисел с плавающей точкой. Все они отличались друг от друга. Более того, в некоторых из них арифметические действия выполнялись неправильно, поскольку арифметика с плавающей точкой имеет некоторые тонкости, которые не очевидны для среднестатистического разработчика аппаратного обеспечения. Чтобы изменить эту ситуацию, в конце 70-х годов институт IEEE учредил комиссию по стандартизации арифметики с плавающей точкой. Целью было не только дать возможность переносить данные с одного компьютера на другой, но и обеспечить разработчиков аппаратного обеспечения заведомо правильной моделью. В результате в 1985 г. вышел стандарт IEEE 754. В настоящее время большинство процессоров (в том числе Intel, SPARC и JVM) содержат команды с плавающей точкой, которые соответствуют этому стандарту. Форматы стандарта IEEE одинарной точности (32 бита); двойной точности (64 бита); повышенной точности (80 бит). Формат повышенной точности предназначен для уменьшения ошибки округления. Он применяется главным образом в арифметических устройствах с плавающей точкой, поэтому мы не будем о нем говорить. Представление мантиссы в стандарте IEEE В представлении числа используется нормализованная мантисса. Нормализованная мантисса начинается с двоичной точки, за которой следует старший бит мантиссы, всегда равный 1, а затем - остаток мантиссы. Следуя практике, начатой с компьютера PDP-11, компьютерщики осознали, что 1 в старшем бите мантиссы сохранять не нужно, а нужно просто считать, что он там есть. Следовательно, стандарт определяет мантиссу следующим образом: она состоит из неявного бита, который всегда равен 1, и неявной двоичной точки, за которыми идут 23 или 52 произвольных бита. Если все 23 или 52 бита мантиссы равны 0, то мантисса имеет значение 1,0. Если все биты мантиссы равны 1, то числовое значение мантиссы немного меньше, чем 2,0. Во избежание путаницы в английском языке для обозначения комбинации из неявного бита, неявной двоичной точки и 23 или 52 явных битов вместо термина мантисса (mantissa) используется термин значащая часть числа (significand). Значащая часть числа (s) всех нормализованных чисел лежит в диапазоне 1 <= s < 2 Представление порядка в стандарте IEEE Порядок числа хранится "смещенным", т.е. к нему прибавляется фиксированное число так, чтобы порядок был всегда неотрицательным. Всегда неотрицательный порядок избавляет от необходимости выделять один байт для хранения знака порядка и упрощает выполнения операций сравнения и арифметических операций над порядками. Знак порядка в ячейке не хранится. Но истинный порядок может быть как положительным так и отрицательным. Разумно разделить поровну между положительными и отрицательными значениями, отводимые для хранения порядка разряды памяти компьютера. В таком случае между машинным порядком и истинным (ИП) устанавливается следующее соответствие: машинный порядок 0 1 2 … 127 128 … 254 255 истинный порядок -127 -126 -125 … 0 1 … 126 127 - для формата одинарной точности Представление порядка в стандарте IEEE (продолжение) Если обозначить машинный порядок МП, а истинный - ИП, то связь между ними выразится следующей формулой: МП10 = ИП10 + 127 - в десятичной системе счисления МП2 = ИП2 + 11111112 - в двоичной системе счисления (127 = 11111112) При выполнении вычислений с плавающей точкой процессор это смещение учитывает. Для того, чтобы не хранить знак порядка и был придуман так называемый смещённый порядок. Диапазон изменения чисел 1. для чисел обычной точности максимальное значение порядка равно 11111112=127, следовательно, максимальное значение составит 2127≈0,17014118346*1039 Максимальное значение положительной мантиссы будет 223-1≈223≈107 (223=2(10*2,3) ≈10002,3≈10(3*2,3) ≈107) 2. для чисел двойной точности максимальное значение порядка равно 11111111112=1023, следовательно, максимальное значение составит 21023=0,898846567 * 10 308 Максимальное значение положительной мантиссы будет 252-1 ≈ 1015,6 (252=2(10*5,2) ≈10005,2≈10(3*5,2) ≈1015,6) Характеристики чисел с плавающей точкой стандарта IEEE Одинарная точность Двойная точность Количество битов в знаке 1 1 Количество битов в экспоненте (порядке) 8 11 Количество битов в мантиссе 23 52 Общее число битов 32 64 Смещение экспоненты 127 1023 Область значений экспоненты от -126 до +127 от -1022 до +1023 Самое маленькое нормализованное число 2-126 2-1022 Самое большое нормализованное число ≈2128 ≈21024 Диапазон десятичных дробей ≈ от 10-38 до 1038 ≈ от 10-308 до 10308 Самое маленькое ненормализованное число ≈10-45 ≈ 10-324 Примечание Традиционные проблемы, связанные с числами с плавающей точкой — переполнение, потеря значимости и неинициализированные числа. Помимо нормализованных чисел в стандарте IEEE предусмотрено еще 4 типа чисел: Тип числа Знак Порядок Мантисса нормализованное число ± 0 < exp < max любой набор битов ненормализованное число ± 0 любой ненулевой набор битов ноль ± 0 0 бесконечность ± max (все 1) 0 не число ± max (все 1) любой ненулевой набор битов Алгоритм представления числа с плавающей точкой 1. перевести число из q - ичной системы счисления в двоичную; 2. представить двоичное число в нормализованной экспоненциальной форме; 3. рассчитать смещённый порядок числа; 4. разместить знак, порядок и мантиссу в соответствующие разряды сетки. Пример 1 Как будет выглядеть число 0,5 в памяти машины в нормализованном формате одинарной точности? 1. 0,5 = 0,12 0,5 * 2 1,0 2. 0,12 = 1,0*2-1 (основание и порядок записаны в десятичной системе счисления) 3. СП = -1 + 127 = 126 (126 = 11111102) 4. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 знак числ а порядок мантисса Перепишем число в шестнадцатеричной системе счисления, предварительно разбив его побайтно: 0011 1111 0000 0000 0000 0000 0000 0000 В нормализованном формате с одинарной точностью число 0,5 будет 001111110000000000000000000000002 = 3F00000016 (см. далее) Пример 2 Представить число -18,125 в машинном виде с использованием 4 байтового представления. 1. Переводим целую часть: Переводим дробную часть: 18 2 0 9 2 1 4 2 0 2 2 0 1 0, 125 *2 0 250 *2 0 500 *2 1 000 -18,125 = -10010,0012 2. – 10010,0012 = - 1,0010001*24 или – 10010,0012 = -0,10010001*10100 (основание и порядок записаны в двоичной системе счисления) 3. СП10=4 + 127=131 СП2 = 1002 + 11111112 = 100000112 4. в памяти машины число будет иметь вид: 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 1 9 1 0 0 В нормализованном формате с одинарной точностью число - 18,125 будет 110000011001000100000000000000002 = C191000016 0 0 Достоинствами представления чисел в формате с плавающей запятой считаются: большой диапазон обрабатываемых чисел; более высокая точность выполняемых вычислений по сравнению с форматом чисел с фиксированной запятой. Примечание: не все ученые и разработчики программ и аппаратных средств оптимистично настроены по отношению к стандарту IEEE 754. Они считают, что главная ошибка самого подхода к математической обработке числовых данных на компьютере состоит в попытке воспроизвести на нем невозможное – объекты теоретической математики, такие как действительные числа и интервалы действительных чисел. Компьютеринг нуждается в принципиально новых математических конструкциях, которые более адекватно отражали бы как потребности практики, так и возможности компьютеров. И первым шагом должны стать признание некорректности стандарта IEEE 754, а затем и разработка новых стандартов обработки нецелочисленных данных. К недостаткам представления чисел в формате с плавающей точкой можно отнести: более сложный алгоритм внутреннего представления чисел по сравнению с форматом чисел с фиксированной запятой; сложность алгоритмов реализации арифметических операций.