Лекция 3. Информационно-логические основы вычислительной техники (продолжение)
Представление вещественных чисел (слайды 2-5)
Вещественные (действительные) числа обычно представляются в формате с плавающей запятой. Числа с плавающей запятой – один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений. Его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.
Число в формате с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на три поля: знак, порядок и мантиссу.
Представление чисел с плавающей запятой в двоичном коде регулируется международным стандартом IEEE 754. Данный стандарт разработан ассоциацией IEEE (Institute of Electrical and Electronics Engineers).
Стандарт предполагает представление числа в нормализованной форме, в которой мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно).
Например, десятичное число
|
|
155,62510 = 10011011,1012
в нормализованной форме представляется следующим образом:
1,0011011101∙2+111
где 1,0011011101 –мантисса числа, а +111 – его порядок. Разумеется, в общем случае порядок нормализованного числа может быть отрицательным или нулевым.
Таким образом, в мантиссе нормализованного двоичного числа слева от запятой находится ровно один знак, и этот знак – двоичная 1. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как -∞ и +∞).
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен 1, то его можно не записывать, сэкономив таким образом один разряд, что и используется в стандарте IEEE 754.
В стандарте IEEE 754 число с плавающей запятой (рис. 1) включает:
– знаковый разряд – для указания знака всего числа (0 – если число положительное, и 1 – если число отрицательное);
– порядок (показатель степени), записываемый как целое число в коде со сдвигом;
– мантиссу, представляющую дробную часть числа в нормализованном виде (целое число).
|
Рис. 1. Представление 16-разрядного двоичного числа в формате
с плавающей запятой
При этом двоичное число с плавающей запятой представляется в следующем виде:
|
|
(-1)S × M × 2P,
где S – значение знакового разряда, M – мантисса, P – порядок, а 2 – основание системы счисления. Аналогичным образом представляются числа с плавающей запятой в других системах счисления, отличаясь лишь основанием.
Заметим, что лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями. Причем некоторое число может в одной системе счисления представляться точно, а в другой – лишь приближенно. Так, например, десятичная дробь 0.1 в десятичной системе счисления представляется точно, а в двоичной – приближенно. Это следует учитывать при разработке алгоритмов вычислений с вещественными числами.
Рассмотрим базовые форматы представления двоичных чисел с плавающей запятой и нормализованной мантиссой в стандарте IEEE 754.
Число половинной точности (Binary16, Half precision)
Число половинной точности (рис. 2) – компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера – 16 бит или 2 байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.
Порядок записывается со сдвигом 15. То есть, чтобы получить актуальное значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле 2p-1 – 1, где p – число разрядов, отведенное на хранение порядка). Под мантиссу отведено 10 разрядов с 0-го по 9-й, под порядок – 5 разрядов с 10-го по 14-й. “Белая” 1 между разрядами 9 и 10 напоминает о подразумеваемом старшем разряде мантиссы. |
Рис. 2. Представление 16-разрядного двоичного числа в формате |
Число одинарной точности (Binary32, Single precision)
Число одинарной точности (рис. 3) – компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера – 32 бита или 4 байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность. Порядок записывается со сдвигом 127.
Под мантиссу отведено 23 разряда с 0 -го по 22 -й, под порядок – 8 разрядов с 23 -го по 30 -й.
Знак | ||||||||||||||||||||||||||||||||
Порядок | Мантисса | |||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
30 | 23 | 22 | 0 |
Рис. 3. Представление 32-разрядного двоичного числа в формате
с плавающей запятой и нормализованной мантиссой
Число двойной точности (Binary64, Double precision)
Число двойной точности (рис. 4) – компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера – 64 бита или 8 байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности. Порядок записывается со сдвигом 1023.
Знак | |||||||||||||||||||||||||||||||||||
Порядок | Мантисса | ||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
62 | 52 | 51 | 0 |
|
|
Рис. 4. Представление 64-разрядного двоичного числа в формате
с плавающей запятой и нормализованной мантиссой
Под мантиссу отведено 52 разряда с 0 -го по 51 -й, под порядок – 11 разрядов с 52 -го по 62 -й.
Число четверной точности (Binary128, Quadruple precision)
Число четверной точности (рис. 5) – компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера – 128 бит или 16 байт). Используется в случае необходимости очень высокой точности. Порядок записывается со сдвигом 16383.
Знак | |||||||||||||||||||||||||||||||||||||||
Порядок | Мантисса | ||||||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
126 | 112 | 111 | 0 |
Рис. 5. Представление 128-разрядного двоичного числа в формате
с плавающей запятой и нормализованной мантиссой
Под мантиссу отведено 112 разрядов с 0 -го по 111 -й, под порядок – 15 разрядов с 112 -го по 126 -й.
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована. В совокупности эти факторы делают Quadruple precision экзотичным и редко встречающимся форматом чисел с плавающей запятой.