Число одинарной точности

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Число́ одина́рной то́чности (англ. Single precision, Single) — широко распространенный компьютерный формат представления вещественных чисел, занимающий в памяти 32 бита (4 байта). Как правило, под ним понимают формат числа с плавающей запятой стандарта IEEE 754.

Числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр в диапазоне от 10^{-38} до примерно 10^{38}

В современных компьютерах вычисления с числами с плавающей запятой поддерживаются аппаратным сопроцессором (FPU — Floating Point Unit). Однако во многих вычислительных архитектурах нет аппаратной поддержки чисел с плавающей запятой и тогда работа с ними осуществляется программно.

Знак
Порядок Мантисса
0 0 1 1 1 1 1 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,15625
31 24 23 16 15 8 7 0

Для вычисления показателя степени из восьмиразрядного поля порядка вычитается смещение порядка равное 12710 = 7F16 = 011111112, (то есть, 011111002 - 011111112 = 12410 - 12710 = -310). Так как в нормализованной двоичной мантиссе целая часть всегда равна единице, то в поле мантиссы записывается только её дробная часть. Для вычисления мантиссы к единице добавляется дробная часть мантиссы из 23-х разрядного поля дробной части мантиссы 1,010000000000000000000002. Число равно произведению мантиссы со знаком на двойку в степени порядка = 1,012*210-310 = 1012*210-510 = 510*210-510 = 0,1562510.

Общий шаблон для побитового доступа[править | править исходный текст]

union
  {
    float fl;
    DWORD dw;
  } f;
int s = ( f.dw >> 31 ) ? -1 : 1;
int e = ( f.dw >> 23 ) & 0xFF;
int m =
  e ?
    ( f.dw & 0x7FFFFF ) | 0x800000 :
    ( f.dw & 0x7FFFFF ) << 1;
 
e -= 127;

Результирующая формула расчёта будет s * m * 2 ^ e.

Примеры чисел одинарной точности[править | править исходный текст]

Эти примеры представлены в шестнадцатеричном виде чисел с плавающей запятой. Они включают знаковый бит, порядок и мантиссу.

3f80 0000   = 1
c000 0000   = −2

7f7f ffff   ≈ 3.4028234 × 1038  (Максимальное одинарной точности)

0000 0000   = 0
8000 0000   = −0

7f80 0000   = infinity
ff80 0000   = −infinity
                                
3eaa aaab   ≈ 1/3

По умолчанию, 1/3 округляется вверх, в отличие от чисел двойной точности.

См. также[править | править исходный текст]

Ссылки[править | править исходный текст]