half  2.2
IEEE 754-based half-precision floating-point library
half_float Namespace Reference

Main namespace for half-precision functionality. More...

Namespaces

 literal
 Library-defined half-precision literals.
 

Classes

class  half
 Half-precision floating-point type. More...
 

Functions

Comparison operators

constexpr bool operator== (half x, half y)
 Comparison for equality. More...
 
constexpr bool operator!= (half x, half y)
 Comparison for inequality. More...
 
constexpr bool operator< (half x, half y)
 Comparison for less than. More...
 
constexpr bool operator> (half x, half y)
 Comparison for greater than. More...
 
constexpr bool operator<= (half x, half y)
 Comparison for less equal. More...
 
constexpr bool operator>= (half x, half y)
 Comparison for greater equal. More...
 
Arithmetic operators

constexpr half operator+ (half arg)
 Identity. More...
 
constexpr half operator- (half arg)
 Negation. More...
 
half operator+ (half x, half y)
 Addition. More...
 
half operator- (half x, half y)
 Subtraction. More...
 
half operator* (half x, half y)
 Multiplication. More...
 
half operator/ (half x, half y)
 Division. More...
 
Input and output

template<typename charT , typename traits >
std::basic_ostream< charT, traits > & operator<< (std::basic_ostream< charT, traits > &out, half arg)
 Output operator. More...
 
template<typename charT , typename traits >
std::basic_istream< charT, traits > & operator>> (std::basic_istream< charT, traits > &in, half &arg)
 Input operator. More...
 
Basic mathematical operations

constexpr half fabs (half arg)
 Absolute value. More...
 
constexpr half abs (half arg)
 Absolute value. More...
 
half fmod (half x, half y)
 Remainder of division. More...
 
half remainder (half x, half y)
 Remainder of division. More...
 
half remquo (half x, half y, int *quo)
 Remainder of division. More...
 
half fma (half x, half y, half z)
 Fused multiply add. More...
 
constexpr half fmax (half x, half y)
 Maximum of half expressions. More...
 
constexpr half fmin (half x, half y)
 Minimum of half expressions. More...
 
half fdim (half x, half y)
 Positive difference. More...
 
half nanh (const char *arg)
 Get NaN value. More...
 
Exponential functions

half exp (half arg)
 Exponential function. More...
 
half exp2 (half arg)
 Binary exponential. More...
 
half expm1 (half arg)
 Exponential minus one. More...
 
half log (half arg)
 Natural logarithm. More...
 
half log10 (half arg)
 Common logarithm. More...
 
half log2 (half arg)
 Binary logarithm. More...
 
half log1p (half arg)
 Natural logarithm plus one. More...
 
Power functions

half sqrt (half arg)
 Square root. More...
 
half rsqrt (half arg)
 Inverse square root. More...
 
half cbrt (half arg)
 Cubic root. More...
 
half hypot (half x, half y)
 Hypotenuse function. More...
 
half hypot (half x, half y, half z)
 Hypotenuse function. More...
 
half pow (half x, half y)
 Power function. More...
 
Trigonometric functions

void sincos (half arg, half *sin, half *cos)
 Compute sine and cosine simultaneously. More...
 
half sin (half arg)
 Sine function. More...
 
half cos (half arg)
 Cosine function. More...
 
half tan (half arg)
 Tangent function. More...
 
half asin (half arg)
 Arc sine. More...
 
half acos (half arg)
 Arc cosine function. More...
 
half atan (half arg)
 Arc tangent function. More...
 
half atan2 (half y, half x)
 Arc tangent function. More...
 
Hyperbolic functions

half sinh (half arg)
 Hyperbolic sine. More...
 
half cosh (half arg)
 Hyperbolic cosine. More...
 
half tanh (half arg)
 Hyperbolic tangent. More...
 
half asinh (half arg)
 Hyperbolic area sine. More...
 
half acosh (half arg)
 Hyperbolic area cosine. More...
 
half atanh (half arg)
 Hyperbolic area tangent. More...
 
Error and gamma functions

half erf (half arg)
 Error function. More...
 
half erfc (half arg)
 Complementary error function. More...
 
half lgamma (half arg)
 Natural logarithm of gamma function. More...
 
half tgamma (half arg)
 Gamma function. More...
 
Rounding

half ceil (half arg)
 Nearest integer not less than half value. More...
 
half floor (half arg)
 Nearest integer not greater than half value. More...
 
half trunc (half arg)
 Nearest integer not greater in magnitude than half value. More...
 
half round (half arg)
 Nearest integer. More...
 
long lround (half arg)
 Nearest integer. More...
 
half rint (half arg)
 Nearest integer using half's internal rounding mode. More...
 
long lrint (half arg)
 Nearest integer using half's internal rounding mode. More...
 
half nearbyint (half arg)
 Nearest integer using half's internal rounding mode. More...
 
long long llround (half arg)
 Nearest integer. More...
 
long long llrint (half arg)
 Nearest integer using half's internal rounding mode. More...
 
Floating point manipulation

half frexp (half arg, int *exp)
 Decompress floating-point number. More...
 
half scalbln (half arg, long exp)
 Multiply by power of two. More...
 
half scalbn (half arg, int exp)
 Multiply by power of two. More...
 
half ldexp (half arg, int exp)
 Multiply by power of two. More...
 
half modf (half arg, half *iptr)
 Extract integer and fractional parts. More...
 
int ilogb (half arg)
 Extract exponent. More...
 
half logb (half arg)
 Extract exponent. More...
 
half nextafter (half from, half to)
 Next representable value. More...
 
half nexttoward (half from, long double to)
 Next representable value. More...
 
constexpr half copysign (half x, half y)
 Take sign. More...
 
Floating point classification

constexpr int fpclassify (half arg)
 Classify floating-point value. More...
 
constexpr bool isfinite (half arg)
 Check if finite number. More...
 
constexpr bool isinf (half arg)
 Check for infinity. More...
 
constexpr bool isnan (half arg)
 Check for NaN. More...
 
constexpr bool isnormal (half arg)
 Check if normal number. More...
 
constexpr bool signbit (half arg)
 Check sign. More...
 
Comparison

constexpr bool isgreater (half x, half y)
 Quiet comparison for greater than. More...
 
constexpr bool isgreaterequal (half x, half y)
 Quiet comparison for greater equal. More...
 
constexpr bool isless (half x, half y)
 Quiet comparison for less than. More...
 
constexpr bool islessequal (half x, half y)
 Quiet comparison for less equal. More...
 
constexpr bool islessgreater (half x, half y)
 Quiet comarison for less or greater. More...
 
constexpr bool isunordered (half x, half y)
 Quiet check if unordered. More...
 
Casting

template<typename T , typename U >
half_cast (U arg)
 Cast to or from half-precision floating-point number. More...
 
template<typename T , std::float_round_style R, typename U >
half_cast (U arg)
 Cast to or from half-precision floating-point number. More...
 
Error handling

int feclearexcept (int excepts)
 Clear exception flags. More...
 
int fetestexcept (int excepts)
 Test exception flags. More...
 
int feraiseexcept (int excepts)
 Raise exception flags. More...
 
int fegetexceptflag (int *flagp, int excepts)
 Save exception flags. More...
 
int fesetexceptflag (const int *flagp, int excepts)
 Restore exception flags. More...
 
void fethrowexcept (int excepts, const char *msg="")
 Throw C++ exceptions based on set exception flags. More...
 

Detailed Description

Main namespace for half-precision functionality.

This namespace contains all the functionality provided by the library.

Function Documentation

◆ operator==()

constexpr bool half_float::operator== ( half  x,
half  y 
)
inlineconstexpr

Comparison for equality.

Parameters
xfirst operand
ysecond operand
Return values
trueif operands equal
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator!=()

constexpr bool half_float::operator!= ( half  x,
half  y 
)
inlineconstexpr

Comparison for inequality.

Parameters
xfirst operand
ysecond operand
Return values
trueif operands not equal
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator<()

constexpr bool half_float::operator< ( half  x,
half  y 
)
inlineconstexpr

Comparison for less than.

Parameters
xfirst operand
ysecond operand
Return values
trueif x less than y
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator>()

constexpr bool half_float::operator> ( half  x,
half  y 
)
inlineconstexpr

Comparison for greater than.

Parameters
xfirst operand
ysecond operand
Return values
trueif x greater than y
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator<=()

constexpr bool half_float::operator<= ( half  x,
half  y 
)
inlineconstexpr

Comparison for less equal.

Parameters
xfirst operand
ysecond operand
Return values
trueif x less equal y
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator>=()

constexpr bool half_float::operator>= ( half  x,
half  y 
)
inlineconstexpr

Comparison for greater equal.

Parameters
xfirst operand
ysecond operand
Return values
trueif x greater equal y
falseelse
Exceptions
FE_INVALIDif x or y is NaN

◆ operator+() [1/2]

constexpr half half_float::operator+ ( half  arg)
inlineconstexpr

Identity.

Parameters
argoperand
Returns
unchanged operand

◆ operator-() [1/2]

constexpr half half_float::operator- ( half  arg)
inlineconstexpr

Negation.

Parameters
argoperand
Returns
negated operand

◆ operator+() [2/2]

half half_float::operator+ ( half  x,
half  y 
)
inline

Addition.

This operation is exact to rounding for all rounding modes.

Parameters
xleft operand
yright operand
Returns
sum of half expressions
Exceptions
FE_INVALIDif x and y are infinities with different signs or signaling NaNs
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ operator-() [2/2]

half half_float::operator- ( half  x,
half  y 
)
inline

Subtraction.

This operation is exact to rounding for all rounding modes.

Parameters
xleft operand
yright operand
Returns
difference of half expressions
Exceptions
FE_INVALIDif x and y are infinities with equal signs or signaling NaNs
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ operator*()

half half_float::operator* ( half  x,
half  y 
)
inline

Multiplication.

This operation is exact to rounding for all rounding modes.

Parameters
xleft operand
yright operand
Returns
product of half expressions
Exceptions
FE_INVALIDif multiplying 0 with infinity or if x or y is signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ operator/()

half half_float::operator/ ( half  x,
half  y 
)
inline

Division.

This operation is exact to rounding for all rounding modes.

Parameters
xleft operand
yright operand
Returns
quotient of half expressions
Exceptions
FE_INVALIDif dividing 0s or infinities with each other or if x or y is signaling NaN
FE_DIVBYZEROif dividing finite value by 0
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ operator<<()

std::basic_ostream<charT,traits>& half_float::operator<< ( std::basic_ostream< charT, traits > &  out,
half  arg 
)

Output operator.

This uses the built-in functionality for streaming out floating-point numbers.

Parameters
outoutput stream to write into
arghalf expression to write
Returns
reference to output stream

◆ operator>>()

std::basic_istream<charT,traits>& half_float::operator>> ( std::basic_istream< charT, traits > &  in,
half arg 
)

Input operator.

This uses the built-in functionality for streaming in floating-point numbers, specifically double precision floating point numbers (unless overridden with HALF_ARITHMETIC_TYPE). So the input string is first rounded to double precision using the underlying platform's current floating-point rounding mode before being rounded to half-precision using the library's half-precision rounding mode.

Parameters
ininput stream to read from
arghalf to read into
Returns
reference to input stream
Exceptions
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ fabs()

constexpr half half_float::fabs ( half  arg)
inlineconstexpr

Absolute value.

See also: Documentation for std::fabs.

Parameters
argoperand
Returns
absolute value of arg

◆ abs()

constexpr half half_float::abs ( half  arg)
inlineconstexpr

Absolute value.

See also: Documentation for std::abs.

Parameters
argoperand
Returns
absolute value of arg

◆ fmod()

half half_float::fmod ( half  x,
half  y 
)
inline

Remainder of division.

See also: Documentation for std::fmod.

Parameters
xfirst operand
ysecond operand
Returns
remainder of floating-point division.
Exceptions
FE_INVALIDif x is infinite or y is 0 or if x or y is signaling NaN

◆ remainder()

half half_float::remainder ( half  x,
half  y 
)
inline

Remainder of division.

See also: Documentation for std::remainder.

Parameters
xfirst operand
ysecond operand
Returns
remainder of floating-point division.
Exceptions
FE_INVALIDif x is infinite or y is 0 or if x or y is signaling NaN

◆ remquo()

half half_float::remquo ( half  x,
half  y,
int *  quo 
)
inline

Remainder of division.

See also: Documentation for std::remquo.

Parameters
xfirst operand
ysecond operand
quoaddress to store some bits of quotient at
Returns
remainder of floating-point division.
Exceptions
FE_INVALIDif x is infinite or y is 0 or if x or y is signaling NaN

◆ fma()

half half_float::fma ( half  x,
half  y,
half  z 
)
inline

Fused multiply add.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::fma.

Parameters
xfirst operand
ysecond operand
zthird operand
Returns
( x * y ) + z rounded as one operation.
Exceptions
FE_INVALIDaccording to operator*() and operator+() unless any argument is a quiet NaN and no argument is a signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding the final addition

◆ fmax()

constexpr half half_float::fmax ( half  x,
half  y 
)
inlineconstexpr

Maximum of half expressions.

See also: Documentation for std::fmax.

Parameters
xfirst operand
ysecond operand
Returns
maximum of operands, ignoring quiet NaNs
Exceptions
FE_INVALIDif x or y is signaling NaN

◆ fmin()

constexpr half half_float::fmin ( half  x,
half  y 
)
inlineconstexpr

Minimum of half expressions.

See also: Documentation for std::fmin.

Parameters
xfirst operand
ysecond operand
Returns
minimum of operands, ignoring quiet NaNs
Exceptions
FE_INVALIDif x or y is signaling NaN

◆ fdim()

half half_float::fdim ( half  x,
half  y 
)
inline

Positive difference.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::fdim.

Parameters
xfirst operand
ysecond operand
Returns
x - y or 0 if difference negative
Exceptions
FE_...according to operator-(half,half)

◆ nanh()

half half_float::nanh ( const char *  arg)
inline

Get NaN value.

See also: Documentation for std::nan.

Parameters
argstring code
Returns
quiet NaN

◆ exp()

half half_float::exp ( half  arg)
inline

Exponential function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::exp.

Parameters
argfunction argument
Returns
e raised to arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ exp2()

half half_float::exp2 ( half  arg)
inline

Binary exponential.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::exp2.

Parameters
argfunction argument
Returns
2 raised to arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ expm1()

half half_float::expm1 ( half  arg)
inline

Exponential minus one.

This function may be 1 ULP off the correctly rounded exact result in <0.05% of inputs for std::round_to_nearest and in <1% of inputs for any other rounding mode.

See also: Documentation for std::expm1.

Parameters
argfunction argument
Returns
e raised to arg and subtracted by 1
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ log()

half half_float::log ( half  arg)
inline

Natural logarithm.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::log.

Parameters
argfunction argument
Returns
logarithm of arg to base e
Exceptions
FE_INVALIDfor signaling NaN or negative argument
FE_DIVBYZEROfor 0
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ log10()

half half_float::log10 ( half  arg)
inline

Common logarithm.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::log10.

Parameters
argfunction argument
Returns
logarithm of arg to base 10
Exceptions
FE_INVALIDfor signaling NaN or negative argument
FE_DIVBYZEROfor 0
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ log2()

half half_float::log2 ( half  arg)
inline

Binary logarithm.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::log2.

Parameters
argfunction argument
Returns
logarithm of arg to base 2
Exceptions
FE_INVALIDfor signaling NaN or negative argument
FE_DIVBYZEROfor 0
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ log1p()

half half_float::log1p ( half  arg)
inline

Natural logarithm plus one.

This function may be 1 ULP off the correctly rounded exact result in <0.05% of inputs for std::round_to_nearest and in ~1% of inputs for any other rounding mode.

See also: Documentation for std::log1p.

Parameters
argfunction argument
Returns
logarithm of arg plus 1 to base e
Exceptions
FE_INVALIDfor signaling NaN or argument <-1
FE_DIVBYZEROfor -1
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ sqrt()

half half_float::sqrt ( half  arg)
inline

Square root.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::sqrt.

Parameters
argfunction argument
Returns
square root of arg
Exceptions
FE_INVALIDfor signaling NaN and negative arguments
FE_INEXACTaccording to rounding

◆ rsqrt()

half half_float::rsqrt ( half  arg)
inline

Inverse square root.

This function is exact to rounding for all rounding modes and thus generally more accurate than directly computing 1 / sqrt(arg) in half-precision, in addition to also being faster.

Parameters
argfunction argument
Returns
reciprocal of square root of arg
Exceptions
FE_INVALIDfor signaling NaN and negative arguments
FE_INEXACTaccording to rounding

◆ cbrt()

half half_float::cbrt ( half  arg)
inline

Cubic root.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::cbrt.

Parameters
argfunction argument
Returns
cubic root of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTaccording to rounding

◆ hypot() [1/2]

half half_float::hypot ( half  x,
half  y 
)
inline

Hypotenuse function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::hypot.

Parameters
xfirst argument
ysecond argument
Returns
square root of sum of squares without internal over- or underflows
Exceptions
FE_INVALIDif x or y is signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding of the final square root

◆ hypot() [2/2]

half half_float::hypot ( half  x,
half  y,
half  z 
)
inline

Hypotenuse function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::hypot.

Parameters
xfirst argument
ysecond argument
zthird argument
Returns
square root of sum of squares without internal over- or underflows
Exceptions
FE_INVALIDif x, y or z is signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding of the final square root

◆ pow()

half half_float::pow ( half  x,
half  y 
)
inline

Power function.

This function may be 1 ULP off the correctly rounded exact result for any rounding mode in ~0.00025% of inputs.

See also: Documentation for std::pow.

Parameters
xbase
yexponent
Returns
x raised to y
Exceptions
FE_INVALIDif x or y is signaling NaN or if x is finite an negative and y is finite and not integral
FE_DIVBYZEROif x is 0 and y is negative
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ sincos()

void half_float::sincos ( half  arg,
half sin,
half cos 
)
inline

Compute sine and cosine simultaneously.

This returns the same results as sin() and cos() but is faster than calling each function individually.

This function is exact to rounding for all rounding modes.

Parameters
argfunction argument
sinvariable to take sine of arg
cosvariable to take cosine of arg
Exceptions
FE_INVALIDfor signaling NaN or infinity
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ sin()

half half_float::sin ( half  arg)
inline

Sine function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::sin.

Parameters
argfunction argument
Returns
sine value of arg
Exceptions
FE_INVALIDfor signaling NaN or infinity
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ cos()

half half_float::cos ( half  arg)
inline

Cosine function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::cos.

Parameters
argfunction argument
Returns
cosine value of arg
Exceptions
FE_INVALIDfor signaling NaN or infinity
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ tan()

half half_float::tan ( half  arg)
inline

Tangent function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::tan.

Parameters
argfunction argument
Returns
tangent value of arg
Exceptions
FE_INVALIDfor signaling NaN or infinity
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ asin()

half half_float::asin ( half  arg)
inline

Arc sine.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::asin.

Parameters
argfunction argument
Returns
arc sine value of arg
Exceptions
FE_INVALIDfor signaling NaN or if abs(arg) > 1
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ acos()

half half_float::acos ( half  arg)
inline

Arc cosine function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::acos.

Parameters
argfunction argument
Returns
arc cosine value of arg
Exceptions
FE_INVALIDfor signaling NaN or if abs(arg) > 1
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ atan()

half half_float::atan ( half  arg)
inline

Arc tangent function.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::atan.

Parameters
argfunction argument
Returns
arc tangent value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ atan2()

half half_float::atan2 ( half  y,
half  x 
)
inline

Arc tangent function.

This function may be 1 ULP off the correctly rounded exact result in ~0.005% of inputs for std::round_to_nearest, in ~0.1% of inputs for std::round_toward_zero and in ~0.02% of inputs for any other rounding mode.

See also: Documentation for std::atan2.

Parameters
ynumerator
xdenominator
Returns
arc tangent value
Exceptions
FE_INVALIDif x or y is signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ sinh()

half half_float::sinh ( half  arg)
inline

Hyperbolic sine.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::sinh.

Parameters
argfunction argument
Returns
hyperbolic sine value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ cosh()

half half_float::cosh ( half  arg)
inline

Hyperbolic cosine.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::cosh.

Parameters
argfunction argument
Returns
hyperbolic cosine value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ tanh()

half half_float::tanh ( half  arg)
inline

Hyperbolic tangent.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::tanh.

Parameters
argfunction argument
Returns
hyperbolic tangent value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ asinh()

half half_float::asinh ( half  arg)
inline

Hyperbolic area sine.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::asinh.

Parameters
argfunction argument
Returns
area sine value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ acosh()

half half_float::acosh ( half  arg)
inline

Hyperbolic area cosine.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::acosh.

Parameters
argfunction argument
Returns
area cosine value of arg
Exceptions
FE_INVALIDfor signaling NaN or arguments <1
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ atanh()

half half_float::atanh ( half  arg)
inline

Hyperbolic area tangent.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::atanh.

Parameters
argfunction argument
Returns
area tangent value of arg
Exceptions
FE_INVALIDfor signaling NaN or if abs(arg) > 1
FE_DIVBYZEROfor +/-1
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ erf()

half half_float::erf ( half  arg)
inline

Error function.

This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.5% of inputs.

See also: Documentation for std::erf.

Parameters
argfunction argument
Returns
error function value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ erfc()

half half_float::erfc ( half  arg)
inline

Complementary error function.

This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.5% of inputs.

See also: Documentation for std::erfc.

Parameters
argfunction argument
Returns
1 minus error function value of arg
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ lgamma()

half half_float::lgamma ( half  arg)
inline

Natural logarithm of gamma function.

This function may be 1 ULP off the correctly rounded exact result for any rounding mode in ~0.025% of inputs.

See also: Documentation for std::lgamma.

Parameters
argfunction argument
Returns
natural logarith of gamma function for arg
Exceptions
FE_INVALIDfor signaling NaN
FE_DIVBYZEROfor 0 or negative integer arguments
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ tgamma()

half half_float::tgamma ( half  arg)
inline

Gamma function.

This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.25% of inputs.

See also: Documentation for std::tgamma.

Parameters
argfunction argument
Returns
gamma function value of arg
Exceptions
FE_INVALIDfor signaling NaN, negative infinity or negative integer arguments
FE_DIVBYZEROfor 0
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ ceil()

half half_float::ceil ( half  arg)
inline

Nearest integer not less than half value.

See also: Documentation for std::ceil.

Parameters
arghalf to round
Returns
nearest integer not less than arg
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTif value had to be rounded

◆ floor()

half half_float::floor ( half  arg)
inline

Nearest integer not greater than half value.

See also: Documentation for std::floor.

Parameters
arghalf to round
Returns
nearest integer not greater than arg
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTif value had to be rounded

◆ trunc()

half half_float::trunc ( half  arg)
inline

Nearest integer not greater in magnitude than half value.

See also: Documentation for std::trunc.

Parameters
arghalf to round
Returns
nearest integer not greater in magnitude than arg
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTif value had to be rounded

◆ round()

half half_float::round ( half  arg)
inline

Nearest integer.

See also: Documentation for std::round.

Parameters
arghalf to round
Returns
nearest integer, rounded away from zero in half-way cases
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTif value had to be rounded

◆ lround()

long half_float::lround ( half  arg)
inline

Nearest integer.

See also: Documentation for std::lround.

Parameters
arghalf to round
Returns
nearest integer, rounded away from zero in half-way cases
Exceptions
FE_INVALIDif value is not representable as long

◆ rint()

half half_float::rint ( half  arg)
inline

Nearest integer using half's internal rounding mode.

See also: Documentation for std::rint.

Parameters
arghalf expression to round
Returns
nearest integer using default rounding mode
Exceptions
FE_INVALIDfor signaling NaN
FE_INEXACTif value had to be rounded

◆ lrint()

long half_float::lrint ( half  arg)
inline

Nearest integer using half's internal rounding mode.

See also: Documentation for std::lrint.

Parameters
arghalf expression to round
Returns
nearest integer using default rounding mode
Exceptions
FE_INVALIDif value is not representable as long
FE_INEXACTif value had to be rounded

◆ nearbyint()

half half_float::nearbyint ( half  arg)
inline

Nearest integer using half's internal rounding mode.

See also: Documentation for std::nearbyint.

Parameters
arghalf expression to round
Returns
nearest integer using default rounding mode
Exceptions
FE_INVALIDfor signaling NaN

◆ llround()

long long half_float::llround ( half  arg)
inline

Nearest integer.

See also: Documentation for std::llround.

Parameters
arghalf to round
Returns
nearest integer, rounded away from zero in half-way cases
Exceptions
FE_INVALIDif value is not representable as long long

◆ llrint()

long long half_float::llrint ( half  arg)
inline

Nearest integer using half's internal rounding mode.

See also: Documentation for std::llrint.

Parameters
arghalf expression to round
Returns
nearest integer using default rounding mode
Exceptions
FE_INVALIDif value is not representable as long long
FE_INEXACTif value had to be rounded

◆ frexp()

half half_float::frexp ( half  arg,
int *  exp 
)
inline

Decompress floating-point number.

See also: Documentation for std::frexp.

Parameters
argnumber to decompress
expaddress to store exponent at
Returns
significant in range [0.5, 1)
Exceptions
FE_INVALIDfor signaling NaN

◆ scalbln()

half half_float::scalbln ( half  arg,
long  exp 
)
inline

Multiply by power of two.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::scalbln.

Parameters
argnumber to modify
exppower of two to multiply with
Returns
arg multplied by 2 raised to exp
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ scalbn()

half half_float::scalbn ( half  arg,
int  exp 
)
inline

Multiply by power of two.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::scalbn.

Parameters
argnumber to modify
exppower of two to multiply with
Returns
arg multplied by 2 raised to exp
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ ldexp()

half half_float::ldexp ( half  arg,
int  exp 
)
inline

Multiply by power of two.

This function is exact to rounding for all rounding modes.

See also: Documentation for std::ldexp.

Parameters
argnumber to modify
exppower of two to multiply with
Returns
arg multplied by 2 raised to exp
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ modf()

half half_float::modf ( half  arg,
half iptr 
)
inline

Extract integer and fractional parts.

See also: Documentation for std::modf.

Parameters
argnumber to decompress
iptraddress to store integer part at
Returns
fractional part
Exceptions
FE_INVALIDfor signaling NaN

◆ ilogb()

int half_float::ilogb ( half  arg)
inline

Extract exponent.

See also: Documentation for std::ilogb.

Parameters
argnumber to query
Returns
floating-point exponent
Return values
FP_ILOGB0for zero
FP_ILOGBNANfor NaN
INT_MAXfor infinity
Exceptions
FE_INVALIDfor 0 or infinite values

◆ logb()

half half_float::logb ( half  arg)
inline

Extract exponent.

See also: Documentation for std::logb.

Parameters
argnumber to query
Returns
floating-point exponent
Exceptions
FE_INVALIDfor signaling NaN
FE_DIVBYZEROfor 0

◆ nextafter()

half half_float::nextafter ( half  from,
half  to 
)
inline

Next representable value.

See also: Documentation for std::nextafter.

Parameters
fromvalue to compute next representable value for
todirection towards which to compute next value
Returns
next representable value after from in direction towards to
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOWfor infinite result from finite argument
FE_UNDERFLOWfor subnormal result

◆ nexttoward()

half half_float::nexttoward ( half  from,
long double  to 
)
inline

Next representable value.

See also: Documentation for std::nexttoward.

Parameters
fromvalue to compute next representable value for
todirection towards which to compute next value
Returns
next representable value after from in direction towards to
Exceptions
FE_INVALIDfor signaling NaN
FE_OVERFLOWfor infinite result from finite argument
FE_UNDERFLOWfor subnormal result

◆ copysign()

constexpr half half_float::copysign ( half  x,
half  y 
)
inlineconstexpr

Take sign.

See also: Documentation for std::copysign.

Parameters
xvalue to change sign for
yvalue to take sign from
Returns
value equal to x in magnitude and to y in sign

◆ fpclassify()

constexpr int half_float::fpclassify ( half  arg)
inlineconstexpr

Classify floating-point value.

See also: Documentation for std::fpclassify.

Parameters
argnumber to classify
Return values
FP_ZEROfor positive and negative zero
FP_SUBNORMALfor subnormal numbers
FP_INFINITYfor positive and negative infinity
FP_NANfor NaNs
FP_NORMALfor all other (normal) values

◆ isfinite()

constexpr bool half_float::isfinite ( half  arg)
inlineconstexpr

Check if finite number.

See also: Documentation for std::isfinite.

Parameters
argnumber to check
Return values
trueif neither infinity nor NaN
falseelse

◆ isinf()

constexpr bool half_float::isinf ( half  arg)
inlineconstexpr

Check for infinity.

See also: Documentation for std::isinf.

Parameters
argnumber to check
Return values
truefor positive or negative infinity
falseelse

◆ isnan()

constexpr bool half_float::isnan ( half  arg)
inlineconstexpr

Check for NaN.

See also: Documentation for std::isnan.

Parameters
argnumber to check
Return values
truefor NaNs
falseelse

◆ isnormal()

constexpr bool half_float::isnormal ( half  arg)
inlineconstexpr

Check if normal number.

See also: Documentation for std::isnormal.

Parameters
argnumber to check
Return values
trueif normal number
falseif either subnormal, zero, infinity or NaN

◆ signbit()

constexpr bool half_float::signbit ( half  arg)
inlineconstexpr

Check sign.

See also: Documentation for std::signbit.

Parameters
argnumber to check
Return values
truefor negative number
falsefor positive number

◆ isgreater()

constexpr bool half_float::isgreater ( half  x,
half  y 
)
inlineconstexpr

Quiet comparison for greater than.

See also: Documentation for std::isgreater.

Parameters
xfirst operand
ysecond operand
Return values
trueif x greater than y
falseelse

◆ isgreaterequal()

constexpr bool half_float::isgreaterequal ( half  x,
half  y 
)
inlineconstexpr

Quiet comparison for greater equal.

See also: Documentation for std::isgreaterequal.

Parameters
xfirst operand
ysecond operand
Return values
trueif x greater equal y
falseelse

◆ isless()

constexpr bool half_float::isless ( half  x,
half  y 
)
inlineconstexpr

Quiet comparison for less than.

See also: Documentation for std::isless.

Parameters
xfirst operand
ysecond operand
Return values
trueif x less than y
falseelse

◆ islessequal()

constexpr bool half_float::islessequal ( half  x,
half  y 
)
inlineconstexpr

Quiet comparison for less equal.

See also: Documentation for std::islessequal.

Parameters
xfirst operand
ysecond operand
Return values
trueif x less equal y
falseelse

◆ islessgreater()

constexpr bool half_float::islessgreater ( half  x,
half  y 
)
inlineconstexpr

Quiet comarison for less or greater.

See also: Documentation for std::islessgreater.

Parameters
xfirst operand
ysecond operand
Return values
trueif either less or greater
falseelse

◆ isunordered()

constexpr bool half_float::isunordered ( half  x,
half  y 
)
inlineconstexpr

Quiet check if unordered.

See also: Documentation for std::isunordered.

Parameters
xfirst operand
ysecond operand
Return values
trueif unordered (one or two NaN operands)
falseelse

◆ half_cast() [1/2]

T half_float::half_cast ( arg)

Cast to or from half-precision floating-point number.

This casts between half and any built-in arithmetic type. The values are converted directly using the default rounding mode, without any roundtrip over float that a static_cast would otherwise do.

Using this cast with neither of the two types being a half or with any of the two types not being a built-in arithmetic type (apart from half, of course) results in a compiler error and casting between halfs returns the argument unmodified.

Template Parameters
Tdestination type (half or built-in arithmetic type)
Usource type (half or built-in arithmetic type)
Parameters
argvalue to cast
Returns
arg converted to destination type
Exceptions
FE_INVALIDif T is integer type and result is not representable as T
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ half_cast() [2/2]

T half_float::half_cast ( arg)

Cast to or from half-precision floating-point number.

This casts between half and any built-in arithmetic type. The values are converted directly using the specified rounding mode, without any roundtrip over float that a static_cast would otherwise do.

Using this cast with neither of the two types being a half or with any of the two types not being a built-in arithmetic type (apart from half, of course) results in a compiler error and casting between halfs returns the argument unmodified.

Template Parameters
Tdestination type (half or built-in arithmetic type)
Rrounding mode to use.
Usource type (half or built-in arithmetic type)
Parameters
argvalue to cast
Returns
arg converted to destination type
Exceptions
FE_INVALIDif T is integer type and result is not representable as T
FE_OVERFLOW,...UNDERFLOW,...INEXACTaccording to rounding

◆ feclearexcept()

int half_float::feclearexcept ( int  excepts)
inline

Clear exception flags.

This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

See also: Documentation for std::feclearexcept.

Parameters
exceptsOR of exceptions to clear
Return values
0all selected flags cleared successfully

◆ fetestexcept()

int half_float::fetestexcept ( int  excepts)
inline

Test exception flags.

This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

See also: Documentation for std::fetestexcept.

Parameters
exceptsOR of exceptions to test
Returns
OR of selected exceptions if raised

◆ feraiseexcept()

int half_float::feraiseexcept ( int  excepts)
inline

Raise exception flags.

This raises the specified floating point exceptions and also invokes any additional automatic exception handling as configured with the HALF_ERRHANDLIG_... preprocessor symbols. This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

See also: Documentation for std::feraiseexcept.

Parameters
exceptsOR of exceptions to raise
Return values
0all selected exceptions raised successfully

◆ fegetexceptflag()

int half_float::fegetexceptflag ( int *  flagp,
int  excepts 
)
inline

Save exception flags.

This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

See also: Documentation for std::fegetexceptflag.

Parameters
flagpadress to store flag state at
exceptsOR of flags to save
Return values
0for success

◆ fesetexceptflag()

int half_float::fesetexceptflag ( const int *  flagp,
int  excepts 
)
inline

Restore exception flags.

This only copies the specified exception state (including unset flags) without incurring any additional exception handling. This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

See also: Documentation for std::fesetexceptflag.

Parameters
flagpadress to take flag state from
exceptsOR of flags to restore
Return values
0for success

◆ fethrowexcept()

void half_float::fethrowexcept ( int  excepts,
const char *  msg = "" 
)
inline

Throw C++ exceptions based on set exception flags.

This function manually throws a corresponding C++ exception if one of the specified flags is set, no matter if automatic throwing (via HALF_ERRHANDLING_THROW_...) is enabled or not. This function works even if automatic exception flag handling is disabled, but in that case manual flag management is the only way to raise flags.

Parameters
exceptsOR of exceptions to test
msgerror message to use for exception description
Exceptions
std::domain_errorif FE_INVALID or FE_DIVBYZERO is selected and set
std::overflow_errorif FE_OVERFLOW is selected and set
std::underflow_errorif FE_UNDERFLOW is selected and set
std::range_errorif FE_INEXACT is selected and set