Число одинарної точності

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

Числа одинарної точності з плаваючою комою забезпечують відносну точність 7-8 десяткових цифр в діапазоні від 10−38 до приблизно 1038.

У сучасних комп'ютерах обчислення з числами з плаваючою комою підтримуються апаратним співпроцесором (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

Для обчислення показника ступеня з восьмирозрядного поля експоненти віднімається зсув експоненти рівне 127 10=7F16=011111112, (тобто, 01111100 2-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 == 0)? (F.dw & 0x7fffff) << 1: (f.dw & 0x7fffff) | 0x800000;
    e = (e - 127);

Результуюча формула розрахунку буде s * m * 2 ^ e.

Приклади чисел одинарної точності[ред.ред. код]

Ці приклади представлені в шістнадцятковому вигляді чисел з плаваючою комою. Вони включають знаковий біт, експоненту і мантиссу.

3f80 0000 = 1
c000 0000 = -2

7f7f ffff ≈ 3.4028234 × 10 38 (Максимальна одинарної точності)

0000 0000 = 0
8000 0000 = -0

7f80 0000 = infinity
ff80 0000 =-infinity

3eaa aaab ≈ 1/3

За замовчуванням, 1/3 округляється вгору, на відміну від чисел подвійної точності.

Див. також[ред.ред. код]

Посилання[ред.ред. код]