In
computing, 'half precision' is a
computer numbering format that occupies only half of one storage location (word) in computer memory at some
address. A 'half-precision number' may be defined to be a binary or decimal
integer,
fixed point, or
floating point. For binary integers, they are sometimes called 'short'.
''Half-precision floating point'' is a relatively new binary floating-point format that uses 2
bytes and which is not covered by the
IEEE 754 standard for encoding
floating point numbers (but is included in the
IEEE 754r proposed revision).
This format is used in several
computer graphics environments including
OpenEXR,
OpenGL, and
D3DX. The advantage over 8-bit or 16-bit binary integers is that the increased
dynamic range allows for more detail to be preserved in highlights and
shadows. The advantage over 32-bit
single precision binary formats is that it requires half the storage and
bandwidth.
[1]
Half precision memory format
Sign bit: 1
Exponent width: 5
Significand precision: 10 (11 implicit)
The format is assumed to have an
implicit integer bit with value 1 unless the exponent field is all zeros. Only 10 bits of the fraction appear in the memory format. In IEEE 754 parlance, there are 10 bits of significand, but there are 11 bits of significand precision (approximately 3 decimal digits,
).
syyy yyxx xxxx xxxx (10 xs)
Exponent encodings
E
min (0x01) = −14
E
max (0x1e) = 15
Exponent bias (0x0f) = 15
The true exponent = written exponent − exponent bias
0x00 and 0x1f are reserved exponents
0x00 is used to represent
zero and
denormals
0x1f is used to represent
infinity and
NaNs
All bit patterns are valid encodings.
The minimum and maximum representable values are 2
-24 = 5.96E-8 (denormalized) and 65504 respectively. The minimum non-denormalized value is 2
-14 = 6.10E-5.
== Half-precision examples in
hexadecimal==
3c00 = 1
c000 = -2
7bff = 65504 (Max Half precision)
3555 ~ 0.33325... ~ 1/3
(1/3 rounds down like
double precision, because of the odd number of bits in the significand.)
0400 = 2
-14 ~ 6.10352E-5 (Minimum normalized)
0001 = 2
-24 ~ 5.96046E-8 (Minimum denormalized)
0000 = 0
8000 = -0
7c00 = Infinity
fc00 = -Infinity
Usage note
When using ''half-precision'' as an adjective, as in ''half-precision number'', hyphenate it. When using it as a noun ("Single precision differs from half precision."), do not hyphenate it. To avoid confusion with other uses, it is best to include the adjective 'binary' when describing the format.
See also
★
half precision –
single precision –
double precision –
quadruple precision
★
Floating point
External links
★
Minifloats (in ''Survey of Floating-Point Formats'')
★
OpenEXR site
★
Half precision constants from
D3DX
★
OpenGL treatment of half precision
★
Analog devices variant (four-bit exponent)