Class half

Class Documentation

class half

Half-precision floating-point type. This class implements an IEEE-conformant half-precision floating-point type with the usual arithmetic operators and conversions. It is implicitly convertible to single-precision floating-point, which makes artihmetic expressions and functions with mixed-type operands to be of the most precise operand type.

According to the C++98/03 definition, the half type is not a POD type. But according to C++11’s less strict and extended definitions it is both a standard layout type and a trivially copyable type (even if not a POD type), which means it can be standard-conformantly copied using raw binary copies. But in this context some more words about the actual size of the type. Although the half is representing an IEEE 16-bit type, it does not neccessarily have to be of exactly 16-bits size. But on any reasonable implementation the actual binary representation of this type will most probably not ivolve any additional “magic” or padding beyond the simple binary representation of the underlying 16-bit IEEE number, even if not strictly guaranteed by the standard. But even then it only has an actual size of 16 bits if your C++ implementation supports an unsigned integer type of exactly 16 bits width. But this should be the case on nearly any reasonable platform.

So if your C++ implementation is not totally exotic or imposes special alignment requirements, it is a reasonable assumption that the data of a half is just comprised of the 2 bytes of the underlying IEEE representation.

Construction and assignment

inline HALF_CONSTEXPR half () HALF_NOEXCEPT

Default constructor. This initializes the half to 0. Although this does not match the builtin types’ default-initialization semantics and may be less efficient than no initialization, it is needed to provide proper value-initialization semantics.

inline explicit half(float rhs)

Conversion constructor.

Parameters:

rhs – float to convert

Throws:

FE_OVERFLOW – according to rounding

inline operator float() const

Conversion to single-precision.

Returns:

single precision value representing expression value

inline half &operator=(float rhs)

Assignment operator.

Parameters:

rhs – single-precision value to copy from

Throws:

FE_OVERFLOW – according to rounding

Returns:

reference to this half

Arithmetic updates

inline half &operator+=(half rhs)

Arithmetic assignment.

Template Parameters:

T – type of concrete half expression

Parameters:

rhs – half expression to add

Throws:

FE_... – according to operator+(half,half)

Returns:

reference to this half

inline half &operator-=(half rhs)

Arithmetic assignment.

Template Parameters:

T – type of concrete half expression

Parameters:

rhs – half expression to subtract

Throws:

FE_... – according to operator-(half,half)

Returns:

reference to this half

inline half &operator*=(half rhs)

Arithmetic assignment.

Template Parameters:

T – type of concrete half expression

Parameters:

rhs – half expression to multiply with

Throws:

FE_... – according to operator*(half,half)

Returns:

reference to this half

inline half &operator/=(half rhs)

Arithmetic assignment.

Template Parameters:

T – type of concrete half expression

Parameters:

rhs – half expression to divide by

Throws:

FE_... – according to operator/(half,half)

Returns:

reference to this half

inline half &operator+=(float rhs)

Arithmetic assignment.

Parameters:

rhs – single-precision value to add

Throws:

FE_... – according to operator=()

Returns:

reference to this half

inline half &operator-=(float rhs)

Arithmetic assignment.

Parameters:

rhs – single-precision value to subtract

Throws:

FE_... – according to operator=()

Returns:

reference to this half

inline half &operator*=(float rhs)

Arithmetic assignment.

Parameters:

rhs – single-precision value to multiply with

Throws:

FE_... – according to operator=()

Returns:

reference to this half

inline half &operator/=(float rhs)

Arithmetic assignment.

Parameters:

rhs – single-precision value to divide by

Throws:

FE_... – according to operator=()

Returns:

reference to this half

Increment and decrement

inline half &operator++()

Prefix increment.

Throws:

FE_... – according to operator+(half,half)

Returns:

incremented half value

inline half &operator--()

Prefix decrement.

Throws:

FE_... – according to operator-(half,half)

Returns:

decremented half value

inline half operator++(int)

Postfix increment.

Throws:

FE_... – according to operator+(half,half)

Returns:

non-incremented half value

inline half operator--(int)

Postfix decrement.

Throws:

FE_... – according to operator-(half,half)

Returns:

non-decremented half value

Friends

friend struct detail::half_caster
friend class std::numeric_limits< half >