Представление чисел в формате с плавающей точкой

advertisement
Представление чисел в
формате с плавающей
точкой
Для хранения и обработки
вещественных чисел в компьютере
используется формат чисел с плавающей
точкой. Положение точки может меняться.
Порядок указывает, на какое количество
позиций и в каком направлении должна
«переплыть», т.е. сместиться десятичная
точка в мантиссе. Отсюда название
«плавающая точка».
Содержание
Формат чисел с плавающей точкой
Способы представления чисел в памяти компьютера
Стандарт 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, а затем и
разработка новых стандартов обработки нецелочисленных данных.
К недостаткам представления чисел в формате с
плавающей точкой можно отнести:
 более сложный алгоритм внутреннего представления чисел по
сравнению с форматом чисел с фиксированной запятой;
 сложность алгоритмов реализации арифметических операций.
Download