Half precision
From Wikipedia, the free encyclopedia
In computing, half precision is a computer numbering format that occupies only half of one storage locations in computer memory at address. A half-precision number may be defined to be an integer, fixed point, or floating point. For integers, they are typically called short.
Half-precision floating point is a relatively new 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 integer is that the increased dynamic range allows for details to be preserved in highlights and shadows. The advantage over 32-bit single precision formats is that it requires half the storage and bandwidth. [1]
Contents |
[edit] Half precision memory format
Sign bit: 1 Exponent width: 5 Significand precision: 10 (11 implicit)
The format is written with an implicit integer bit with value 1 unless the written exponent is all zeros. Thus only 10 bits of the fraction appear in the memory format. In IEEE 754 parlance, there are 10 bits of mantissa, but there are 11 bits of significand precision (approximately 3 decimal digits, log10(211)).
syyy yyxx xxxx xxxx (10 xs)
[edit] Exponent encodings
Emin (0x01) = −14 Emax (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-25 = 2.98E-8 (denormalized) and 65504 respectively. The minimum non-denormalized value is 2-15 = 3.05E-5.
[edit] 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.)
0000 = 0 8000 = -0
7c00 = Infinity fc00 = -Infinity
[edit] 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.
[edit] See also
- half precision – single precision – double precision – quadruple precision
- Floating point
[edit] 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)