Нормальная и нормализованная форма

Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0; 1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×100, 0,001×10−1, 0,01×10−2, 0,1×10−3), поэтому распространена также другая форма записи — нормализованная, в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (не включительно), а мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как нормальная и нормализованная форма - student2.ru и нормальная и нормализованная форма - student2.ru ). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «1», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем 2 (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).

Знак
  Порядок Мантисса
1,
   
                                 

Типы чисел с плавающей точкой (по IEEE 754)

Число половинной точности (Binary16, Half precision)

Число́ полови́нной то́чности — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — 16 бит или 2 байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.

Знак
  Порядок Мантисса
1,
   
                                 

Порядок записан со сдвигом -15. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле нормальная и нормализованная форма - student2.ru , где нормальная и нормализованная форма - student2.ru - число бит, отведенное на хранение порядка (в случае числа половинной точности нормальная и нормализованная форма - student2.ru ).

Ограничения точности

§ Целые от нуля до 2048 передаются как есть.

§ Целые от 2049 до 4096 округляются к ближайшему чётному целому.

§ Целые от 4097 до 8192 округляются до ближайшего целого, делящегося нацело на 4.

§ Целые от 8193 до 16384 округляются до ближайшего целого, делящегося на 8.

§ Целые от 16385 до 32768 округляются до ближайшего целого, делящегося на 16.

§ Целые от 32769 до 65535 округляются до ближайшего целого, делящегося на 32.

Число одинарной точности (Binary32, Single precision, float)

Число́ одина́рной то́чности — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — 32 бита или 4 байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.

Знак
  Порядок (8 бит) Мантисса (23+1 бита)
1,  
     
                                                                   

Порядок записан со сдвигом -127.

Число двойной точности (Binary64, Double precision, double)

Число́ двойно́й то́чности — компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — 64 бита или 8 байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.

Знак
  Порядок (11 бит) Мантисса (52+1 бит)
       
1, 000
     

Порядок записан со сдвигом -1023.

Число четверной точности (Binary128, Quadruple precision)

Число́ четверно́й то́чности — компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — 128 бит или 16 байт). Используется в случае необходимости крайне высокой точности.



Знак
  Порядок (15 бит) Мантисса (112+1 бит)
       
1,
                   
Мантисса (112+1 бит)
0000
 
                                                                                                                             

Порядок записан со сдвигом -16383.

Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью). В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.

Наши рекомендации