Нормальная и нормализованная форма[править]
Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале . Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, можно записать в 4 формах — , , , ), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от (включительно) до (не включительно), а мантисса двоичного числа принимает значения от (включительно) до (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме ) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа (а заодно и некоторых других , таких как и ).
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).
Порядок числа
При работе с числами, представленными в некоторой системе счисления по основанию b{\displaystyle b}, чаще всего принимают r=b{\displaystyle r=b} и 1∈C1{\displaystyle 1\in {\mathcal {C}}_{1}}, b∈C2{\displaystyle b\in {\mathcal {C}}_{2}}. При этом n{\displaystyle n} совпадает с количеством цифр в числе, если его записать в позиционной системе счисления.
Например для десятичной системы счисления в этом случае каждая декада положительных чисел будет принадлежать только одному порядку:
- C1⊃{1,2,3,4,5,6,7,8,9}{\displaystyle {\mathcal {C}}_{1}\supset \lbrace {}1,2,3,4,5,6,7,8,9\rbrace }
- C2⊃{10,20,30,40,50,60,70,80,90}{\displaystyle {\mathcal {C}}_{2}\supset \lbrace {}10,20,30,40,50,60,70,80,90\rbrace }
- C3⊃{100,200,300,400,500,600,700,800,900}{\displaystyle {\mathcal {C}}_{3}\supset \lbrace {}100,200,300,400,500,600,700,800,900\rbrace }
Аналогичным образом можно определить порядки чисел и для других оснований системы счисления. Чаще других рассматривают
- порядки чисел по основанию b=10{\displaystyle b=10},
- порядки чисел по основанию b=2{\displaystyle b=2}
- порядки чисел по основанию b=e{\displaystyle b=e}.
Порядок чисел в естественном языке
В естественных языках встречаются выражения вроде «на порядок больше», «на много порядков больше», «на пару порядков меньше». В большинстве случаев подразумеваются десятичные порядки, то есть эти выражения можно прочитать как «примерно в десять раз больше», «примерно в 10n{\displaystyle 10^{n}} раз больше, где n{\displaystyle n} — достаточно велика», «примерно в 100 раз меньше».
Типы чисел с плавающей точкой (по IEEE 754)[править]
Число половинной точности (Binary16, Half precision)править
Число́ полови́нной то́чности — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — бит или байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.
Знак | ||||
---|---|---|---|---|
Порядок | Мантисса | |||
1, | ||||
14 | 10 | 9 |
Порядок записан со сдвигом . То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле , где — число бит, отведенное на хранение порядка (в случае числа половинной точности ).
Ограничения точности
- Целые от нуля до передаются как есть.
- Целые от до округляются к ближайшему чётному целому.
- Целые от до округляются до ближайшего целого, делящегося нацело на четыре.
- Целые от до округляются до ближайшего целого, делящегося на восемь.
- Целые от до округляются до ближайшего целого, делящегося на шестнадцать.
- Целые от до округляются до ближайшего целого, делящегося на тридцать два.
Число одинарной точности (Binary32, Single precision, float)править
Число́ одина́рной то́чности — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — бита или байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.
Знак | ||||
---|---|---|---|---|
Порядок (8 бит) | Мантисса (23+1 бита) | |||
1, | ||||
30 | 23 | 22 |
Порядок записан со сдвигом .
Число двойной точности (Binary64, Double precision, double)править
Число́ двойно́й то́чности —
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — бита или байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.
Знак | ||||
---|---|---|---|---|
Порядок(11 бит) | Мантисса(52+1 бит) | |||
1, | ||||
62 | 52 | 51 |
Порядок записан со сдвигом .
Число четверной точности (Binary128, Quadruple precision)править
Число́ четверно́й то́чности —
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — бит или байт). Используется в случае необходимости крайне высокой точности.
Знак | ||||
---|---|---|---|---|
Порядок(15 бит) | Мантисса(112+1 бит) | |||
1, | ||||
126 | 112 | 111 |
Мантисса(112+1 бит) |
---|
Порядок записан со сдвигом .
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.
Диапазон значений чисел с плавающей запятойправить
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, «не число», получается как результат операций типа деления нуля на ноль) и .
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования .
Название в IEEE 754 | Название типа переменной в Си | Диапазон значений | Бит в мантиссе | Бит на переменную |
---|---|---|---|---|
Half precision | — | 6,10×10-5..65504 | 11 | 16 |
Single presicion | float | -3,4×1038..3,4×1038 | 23 | 32 |
Double precision | double | -1,7×10308..1,7×10308 | 53 | 64 |
Extended precision | На некоторых архитектурах (например в сопроцессоре Intel) long double | -3,4×104932..3,4×104932 | 65 | 80 |