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