half_ Class Reference

This reference page is linked to from the following overview topics: Math and Geometry Utilities.



Detailed Description

Half precision (16 bit) float class.

Supports fast conversion between float and half precision.

Format is compatible with openEXRs half precision type. 1 sign bit, 5 exponent bits (bias = 15), 10 fraction bits.

Definition at line 29 of file image.h.

#include <image.h>

List of all members.

Public Member Functions

  half_ ()
  half_ (float f)
  operator float () const
half_ operator= (float f)

Constructor & Destructor Documentation

half_ ( ) [inline]

Definition at line 40 of file image.h.

{};
half_ ( float  f ) [inline]

Definition at line 41 of file image.h.

    {
        unsigned int   x    = *(unsigned int *)&f;
        unsigned int   frac = (x >> 13) & 0x03ff;
        int            exp  = (int)((x >> 23) & 0xff) - 127;

        m_bits = (x >> 16) & 0x8000;  // extract the sign bit

        if (exp > 16) {      // handle overflows/underflows
            exp  = 16;
            frac = 0x03ff;
        } else if (exp <= -15) {
            frac = 0;
            exp  = -15;
        }

        m_bits |= ((exp + 15) << 10) | frac;
    }

Member Function Documentation

operator float ( ) const [inline]

Definition at line 63 of file image.h.

    {
        int           exp  = (m_bits >> 10) & 0x1f;
        unsigned int  f    = (m_bits & 0x8000) << 16; // extract the sign bit
        unsigned int  frac = (m_bits & 0x03ff) << 13;

        if (exp == 0x1f) {      // convert 16-bit FP inf/NaN to 32-bit inf/NaN value
            exp =  0xff - ExponentBiasDelta;
        } else if (exp == 0) {
            exp = -ExponentBiasDelta;  // convert 16-bit FP zero/denorm to 32-bit zero/denorm value
        }

        f |= ((exp + ExponentBiasDelta) << 23) | frac;
        return *(float *)&f;
    }
half_& operator= ( float  f ) [inline]

Definition at line 79 of file image.h.

    {
        *this = half_ (f);
        return *this;
    }

The documentation for this class was generated from the following file:

half_ half_ half_ half_ half_ half_ half_ half_ half_ half_
half_ half_ half_ half_ half_ half_ half_ half_ half_ half_