Число половинной точности

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

Число́ полови́нной то́чности (англ. half precision) — компьютерный формат представления чисел, занимающий в памяти половину компьютерного слова (в случае 32-битного компьютера — 16 бит или 2 байта). Диапазон значений ± 2−24(5.96E-8) — 65504. Приблизительная точность — 3 знака (10 двоичных знаков, log10(211)).

Знак
Экспо-
нента
Мантисса
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 8 7 0

Кодирование поля Exponent[править | править вики-текст]

Числа half-precision binary floating-point кодируют поле Exponent с использованием сдвига (bias) на 15.

  • Emin = 000012 − 011112 = −14
  • Emax = 111102 − 011112 = 15
  • Exponent bias = 011112 = 15

Другими словами, для получения настоящего порядка (для Exponent от 000012 до 111102) надо из закодированного поля Exponent вычесть 15 (т.е. 011112).

С помощью значений 000002 и 111112 поля Exponent кодируют специальные случаи.

Exponent Significand zero Significand non-zero Equation
000002 +0 , −0 число subnormal (−1)signbit × 2−14 × 0.significantbits2
000012, ..., 111102 число normalized (−1)signbit × 2exponent−15 × 1.significantbits2
111112 ±infinity NaN (quiet, signalling)

Минимальное точное (subnormal) положительное значение = 2−24 ≈ 5.96 × 10−8.

Минимальное (normal) положительное значение = 2−14 ≈ 6.10 × 10−5.

Максимальное представляемое значение = (2−2−10) × 215 = 65504.

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

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

0 01111 0000000000  = 1
0 01111 0000000001  = 1 + 2-10 = 1.0009765625 (следующее большее число после 1)
1 10000 0000000000  = −2

0 11110 1111111111  = 65504  

0 00001 0000000000  = 2−14 ≈ 6.10352 × 10−5 (Минимальное нормальное положительное число)
0 00000 1111111111  = 2-14 - 2-24 ≈ 6.09756 × 10−5 (Максимальное денормализованное)
0 00000 0000000001  = 2−24 ≈ 5.96046 × 10−8 (Минимальное положительное денормализованное)

0 00000 0000000000  = 0
1 00000 0000000000  = −0

0 11111 0000000000  = infinity
1 11111 0000000000  = −infinity

0 01101 0101010101  ≈ 0.33325... ≈ 1/3 

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

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

Целые между 0 и 2047 представляются точно
Целые между 2048 и 4095 округляются вниз до ближайшего кратному 2 (четному числу)
Целые между 4096 и 8191 округляются вниз до ближайшего кратному 4
Целые между 8192 и 16383 округляются вниз до ближайшего кратному 8
Целые между 16384 и 32767 округляются вниз до ближайшего кратному 16
Целые между 32768 и 65535 округляются вниз до ближайшего кратному 32

См. также[править | править вики-текст]