Half-precision floating-point format

It is intended for storage of floating-point values in applications where higher precision is not essential, in particular image processing and neural networks.

[4] ILM was searching for an image format that could handle a wide dynamic range, but without the hard drive and memory cost of single or double precision floating point.

[5] The hardware-accelerated programmable shading group led by John Airey at SGI (Silicon Graphics) used the s10e5 data type in 1997 as part of the 'bali' design effort.

[8] However, hardware support for accelerated 16-bit floating point was later dropped by Nvidia before being reintroduced in the Tegra X1 mobile GPU in 2015.

The format is assumed to have an implicit lead bit with value 1 unless the exponent field is stored with all zeros.

ARM processors support (via a floating-point control register bit) an "alternative half-precision" format, which does away with the special case for an exponent value of 31 (111112).

Half precision is used in several computer graphics environments to store pixels, including MATLAB, OpenEXR, JPEG XR, GIMP, OpenGL, Vulkan,[11] Cg, Direct3D, and D3DX.

The advantage over 8-bit or 16-bit integers is that the increased dynamic range allows for more detail to be preserved in highlights and shadows for images, and avoids gamma correction.

The advantage over 32-bit single-precision floating point is that it requires half the storage and bandwidth (at the expense of precision and range).

[27] On RISC-V, the Zfh and Zfhmin extensions provide hardware support for 16-bit half precision floats.

[28] On Power ISA, VSX and the not-yet-approved SVP64 extension provide hardware support for 16-bit half-precision floats as of PowerISA v3.1B and later.