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

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

Число одинарної точності (англ. 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 округляється вгору, на відміну від чисел подвійної точності.

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]