Half-precision floating point type. More...
Public Member Functions | |
half () | |
Default constructor. More... | |
half (detail::expr rhs) | |
Copy constructor. More... | |
half (float rhs) | |
Conversion constructor. More... | |
operator float () const | |
Conversion to single-precision. More... | |
half & | operator= (detail::expr rhs) |
Assignment operator. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator+= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator-= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator*= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator/= (T rhs) |
Arithmetic assignment. More... | |
half & | operator= (float rhs) |
Assignment operator. More... | |
half & | operator+= (float rhs) |
Arithmetic assignment. More... | |
half & | operator-= (float rhs) |
Arithmetic assignment. More... | |
half & | operator*= (float rhs) |
Arithmetic assignment. More... | |
half & | operator/= (float rhs) |
Arithmetic assignment. More... | |
half & | operator++ () |
Prefix increment. More... | |
half & | operator-- () |
Prefix decrement. More... | |
half | operator++ (int) |
Postfix increment. More... | |
half | operator-- (int) |
Postfix decrement. More... | |
half () | |
Default constructor. More... | |
half (detail::expr rhs) | |
Copy constructor. More... | |
half (float rhs) | |
Conversion constructor. More... | |
operator float () const | |
Conversion to single-precision. More... | |
half & | operator= (detail::expr rhs) |
Assignment operator. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator+= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator-= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator*= (T rhs) |
Arithmetic assignment. More... | |
template<typename T > | |
detail::enable< half &, T >::type | operator/= (T rhs) |
Arithmetic assignment. More... | |
half & | operator= (float rhs) |
Assignment operator. More... | |
half & | operator+= (float rhs) |
Arithmetic assignment. More... | |
half & | operator-= (float rhs) |
Arithmetic assignment. More... | |
half & | operator*= (float rhs) |
Arithmetic assignment. More... | |
half & | operator/= (float rhs) |
Arithmetic assignment. More... | |
half & | operator++ () |
Prefix increment. More... | |
half & | operator-- () |
Prefix decrement. More... | |
half | operator++ (int) |
Postfix increment. More... | |
half | operator-- (int) |
Postfix decrement. More... | |
Private Member Functions | |
half (detail::binary_t, detail::uint16 bits) | |
Constructor. More... | |
half (detail::binary_t, detail::uint16 bits) | |
Constructor. More... | |
Private Attributes | |
detail::uint16 | data_ |
Internal binary representation. More... | |
Static Private Attributes | |
static const std::float_round_style | round_style = (std::float_round_style)( 1 ) |
Rounding mode to use. More... | |
Friends | |
struct | detail::functions |
struct | detail::unary_specialized< half > |
struct | detail::binary_specialized< half, half > |
template<typename , typename , std::float_round_style > | |
struct | detail::half_caster |
class | std::numeric_limits< half > |
template<typename , typename , std::float_round_style > | |
struct | detail::half_caster |
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. Additionally all arithmetic operations (and many mathematical functions) are carried out in single-precision internally. All conversions from single- to half-precision are done using the library's default rounding mode, but temporary results inside chained arithmetic expressions are kept in single-precision as long as possible (while of course still maintaining a strong half-precision 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.
|
inline |
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 |
Copy constructor.
T | type of concrete half expression |
rhs | half expression to copy from |
|
inlineexplicit |
Conversion constructor.
rhs | float to convert |
|
inlineprivate |
Constructor.
bits | binary representation to set half to |
|
inline |
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 |
Copy constructor.
T | type of concrete half expression |
rhs | half expression to copy from |
|
inlineexplicit |
Conversion constructor.
rhs | float to convert |
|
inlineprivate |
Constructor.
bits | binary representation to set half to |
|
inline |
Conversion to single-precision.
|
inline |
Assignment operator.
T | type of concrete half expression |
rhs | half expression to copy from |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to add |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to subtract |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to multiply with |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to divide by |
|
inline |
Assignment operator.
rhs | single-precision value to copy from |
|
inline |
Arithmetic assignment.
rhs | single-precision value to add |
|
inline |
Arithmetic assignment.
rhs | single-precision value to subtract |
|
inline |
Arithmetic assignment.
rhs | single-precision value to multiply with |
|
inline |
Arithmetic assignment.
rhs | single-precision value to divide by |
|
inline |
Prefix increment.
|
inline |
Prefix decrement.
Postfix increment.
Postfix decrement.
|
inline |
Conversion to single-precision.
|
inline |
Assignment operator.
T | type of concrete half expression |
rhs | half expression to copy from |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to add |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to subtract |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to multiply with |
|
inline |
Arithmetic assignment.
T | type of concrete half expression |
rhs | half expression to divide by |
|
inline |
Assignment operator.
rhs | single-precision value to copy from |
|
inline |
Arithmetic assignment.
rhs | single-precision value to add |
|
inline |
Arithmetic assignment.
rhs | single-precision value to subtract |
|
inline |
Arithmetic assignment.
rhs | single-precision value to multiply with |
|
inline |
Arithmetic assignment.
rhs | single-precision value to divide by |
|
inline |
Prefix increment.
|
inline |
Prefix decrement.
Postfix increment.
Postfix decrement.
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
staticprivate |
Rounding mode to use.
|
private |
Internal binary representation.