Меню
Главная
Случайная статья
Настройки
|
Число половинной точности (англ. half precision) — компьютерный формат представления чисел, занимающий в памяти половину компьютерного слова (в случае 32-битного компьютера — 16 бит или 2 байта). Для формата IEEE 754-2008 binary16 диапазон значений ± 224(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 214 0.significantbits2
|
000012, ..., 111102 |
число normalized |
(1)signbit 2exponent15 1.significantbits2
|
111112 |
±infinity |
NaN (quiet, signalling)
|
Минимальное точное денормализованное положительное значение =
224 5.96 108.
Минимальное нормализованное положительное значение = 214 6.10 105.
Максимальное представляемое значение = (2210) 215 = 65504.
Примеры чисел половинной точности
В данных примерах числа с плавающей запятой представлены в двоичном представлении. Они включают в себя бит знака, экспоненту и мантиссу.
0 01111 0000000000 = +1 * 215-15 = 1
0 01111 0000000001 = +1.00000000012 * 215-15=1 + 2-10 = 1.0009765625 (следующее большее число после 1)
1 10000 0000000000 = -1 * 216-15 = 2
0 11110 1111111111 = 65504
0 00001 0000000000 = 214 6.10352 105 (Минимальное нормальное положительное число)
0 00000 1111111111 = 2-14 - 2-24 6.09756 105 (Максимальное денормализованное)
0 00000 0000000001 = 224 5.96046 108 (Минимальное положительное денормализованное)
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 округляется вниз.
Пример пересчета на языке pythondata = 31743 #0 11110 1111111111
sign = data >> 15
mantissa = (data & 0x3FF)
degree = (data >> 10) & 0x1F
result = ((-1) ** sign) * (2 ** (degree-15)) * (1 + mantissa/2**10)
print(result)
#результат выполнения программы 65504
Пределы точности на целых числах
Целые между 0 и 2047 представляются точно
Целые между 2048 и 4095 округляются вниз до ближайшего кратному 2 (четному числу)
Целые между 4096 и 8191 округляются вниз до ближайшего кратному 4
Целые между 8192 и 16383 округляются вниз до ближайшего кратному 8
Целые между 16384 и 32767 округляются вниз до ближайшего кратному 16
Целые между 32768 и 65535 округляются вниз до ближайшего кратному 32
См. также
|
|