![]() |
ETRI IVCL 1.0.0
Acceleration SW Platform for Ondevice
|
Classes | |
| struct | binary_t |
| Tag type for binary construction. More... | |
| struct | bits |
| Type traits for floating-point bits. More... | |
| struct | bits< const T > |
| struct | bits< const volatile T > |
| struct | bits< double > |
| Unsigned integer of (at least) 64 bits width. More... | |
| struct | bits< float > |
| Unsigned integer of (at least) 32 bits width. More... | |
| struct | bits< volatile T > |
| struct | bool_type |
| Helper for tag dispatching. More... | |
| struct | conditional |
| Conditional type. More... | |
| struct | conditional< false, T, F > |
| struct | f31 |
| Class for 1.31 unsigned floating-point computation. More... | |
| struct | half_caster |
| struct | half_caster< half, half, R > |
| struct | half_caster< half, U, R > |
| struct | half_caster< T, half, R > |
| struct | is_float |
| Type traits for floating-point types. More... | |
| struct | is_float< const T > |
| struct | is_float< const volatile T > |
| struct | is_float< double > |
| struct | is_float< float > |
| struct | is_float< long double > |
| struct | is_float< volatile T > |
Typedefs | |
| typedef bool_type< true > | true_type |
| typedef bool_type< false > | false_type |
| typedef unsigned short | uint16 |
| Unsigned integer of (at least) 16 bits width. More... | |
| typedef unsigned long | uint32 |
| Fastest unsigned integer of (at least) 32 bits width. More... | |
| typedef long | int32 |
| Fastest unsigned integer of (at least) 32 bits width. More... | |
Functions | |
Implementation defined classification and arithmetic | |
| template<typename T > | |
| bool | builtin_isinf (T arg) |
| template<typename T > | |
| bool | builtin_isnan (T arg) |
| template<typename T > | |
| bool | builtin_signbit (T arg) |
| uint32 | sign_mask (uint32 arg) |
| uint32 | arithmetic_shift (uint32 arg, int i) |
Error handling | |
| int & | errflags () |
| void | raise (int HALF_UNUSED_NOERR(flags), bool HALF_UNUSED_NOERR(cond)=true) |
| HALF_CONSTEXPR_NOERR bool | compsignal (unsigned int x, unsigned int y) |
| HALF_CONSTEXPR_NOERR unsigned int | signal (unsigned int nan) |
| HALF_CONSTEXPR_NOERR unsigned int | signal (unsigned int x, unsigned int y) |
| HALF_CONSTEXPR_NOERR unsigned int | signal (unsigned int x, unsigned int y, unsigned int z) |
| HALF_CONSTEXPR_NOERR unsigned int | select (unsigned int x, unsigned int HALF_UNUSED_NOERR(y)) |
| HALF_CONSTEXPR_NOERR unsigned int | invalid () |
| HALF_CONSTEXPR_NOERR unsigned int | pole (unsigned int sign=0) |
| HALF_CONSTEXPR_NOERR unsigned int | check_underflow (unsigned int arg) |
Conversion and rounding | |
| template<std::float_round_style R> | |
| HALF_CONSTEXPR_NOERR unsigned int | overflow (unsigned int sign=0) |
| template<std::float_round_style R> | |
| HALF_CONSTEXPR_NOERR unsigned int | underflow (unsigned int sign=0) |
| template<std::float_round_style R, bool I> | |
| HALF_CONSTEXPR_NOERR unsigned int | rounded (unsigned int value, int g, int s) |
| template<std::float_round_style R, bool E, bool I> | |
| unsigned int | integral (unsigned int value) |
| template<std::float_round_style R, unsigned int F, bool S, bool N, bool I> | |
| unsigned int | fixed2half (uint32 m, int exp=14, unsigned int sign=0, int s=0) |
| template<std::float_round_style R> | |
| unsigned int | float2half_impl (float value, true_type) |
| template<std::float_round_style R> | |
| unsigned int | float2half_impl (double value, true_type) |
| template<std::float_round_style R, typename T > | |
| unsigned int | float2half_impl (T value,...) |
| template<std::float_round_style R, typename T > | |
| unsigned int | float2half (T value) |
| template<std::float_round_style R, typename T > | |
| unsigned int | int2half (T value) |
| float | half2float_impl (unsigned int value, float, true_type) |
| double | half2float_impl (unsigned int value, double, true_type) |
| template<typename T > | |
| T | half2float_impl (unsigned int value, T,...) |
| template<typename T > | |
| T | half2float (unsigned int value) |
| template<std::float_round_style R, bool E, bool I, typename T > | |
| T | half2int (unsigned int value) |
Mathematics | |
| template<std::float_round_style R> | |
| uint32 | mulhi (uint32 x, uint32 y) |
| uint32 | multiply64 (uint32 x, uint32 y) |
| uint32 | divide64 (uint32 x, uint32 y, int &s) |
| template<bool Q, bool R> | |
| unsigned int | mod (unsigned int x, unsigned int y, int *quo=NULL) |
| template<unsigned int F> | |
| uint32 | sqrt (uint32 &r, int &exp) |
| uint32 | exp2 (uint32 m, unsigned int n=32) |
| uint32 | log2 (uint32 m, unsigned int n=32) |
| std::pair< uint32, uint32 > | sincos (uint32 mz, unsigned int n=31) |
| uint32 | atan2 (uint32 my, uint32 mx, unsigned int n=31) |
| uint32 | angle_arg (unsigned int abs, int &k) |
| std::pair< uint32, uint32 > | atan2_args (unsigned int abs) |
| std::pair< uint32, uint32 > | hyperbolic_args (unsigned int abs, int &exp, unsigned int n=32) |
| template<std::float_round_style R, bool I> | |
| unsigned int | exp2_post (uint32 m, int exp, bool esign, unsigned int sign=0) |
| template<std::float_round_style R, uint32 L> | |
| unsigned int | log2_post (uint32 m, int ilog, int exp, unsigned int sign=0) |
| template<std::float_round_style R> | |
| unsigned int | hypot_post (uint32 r, int exp) |
| template<std::float_round_style R> | |
| unsigned int | tangent_post (uint32 my, uint32 mx, int exp, unsigned int sign=0) |
| template<std::float_round_style R, bool S> | |
| unsigned int | area (unsigned int arg) |
| template<std::float_round_style R, bool C> | |
| unsigned int | erf (unsigned int arg) |
| template<std::float_round_style R, bool L> | |
| unsigned int | gamma (unsigned int arg) |
Variables | |
| HALF_CONSTEXPR_CONST binary_t | binary = binary_t() |
| Tag for binary construction. More... | |
| typedef bool_type<false> half_float::detail::false_type |
| typedef long half_float::detail::int32 |
Fastest unsigned integer of (at least) 32 bits width.
| typedef bool_type<true> half_float::detail::true_type |
| typedef unsigned short half_float::detail::uint16 |
Unsigned integer of (at least) 16 bits width.
| typedef unsigned long half_float::detail::uint32 |
Fastest unsigned integer of (at least) 32 bits width.
|
inline |
Reduce argument for trigonometric functions.
| abs | half-precision floating-point value |
| k | value to take quarter period |
| unsigned int half_float::detail::area | ( | unsigned int | arg | ) |
Area function and postprocessing. This computes the value directly in Q2.30 using the representation asinh|acosh(x) = log(x+sqrt(x^2+|-1)).
| R | rounding mode to use |
| S | true for asinh, false for acosh |
| arg | half-precision argument |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if no other exception occurred |
Platform-independent arithmetic right shift.
| arg | integer value in two's complement |
| i | shift amount (at most 31) |
Fixed point arc tangent. This uses the CORDIC algorithm in vectoring mode.
| my | y coordinate as Q0.30 |
| mx | x coordinate as Q0.30 |
| n | number of iterations (at most 31) |
Get arguments for atan2 function.
| abs | half-precision floating-point value |
| bool half_float::detail::builtin_isinf | ( | T | arg | ) |
Check for infinity.
| T | argument type (builtin floating-point type) |
| arg | value to query |
| true | if infinity |
| false | else |
| bool half_float::detail::builtin_isnan | ( | T | arg | ) |
Check for NaN.
| T | argument type (builtin floating-point type) |
| arg | value to query |
| true | if not a number |
| false | else |
| bool half_float::detail::builtin_signbit | ( | T | arg | ) |
Check sign.
| T | argument type (builtin floating-point type) |
| arg | value to query |
| true | if signbit set |
| false | else |
|
inline |
Check value for underflow.
| arg | non-zero half-precision value to check |
| FE_UNDERFLOW | if arg is subnormal |
|
inline |
Check and signal for any NaN.
| x | first half-precision value to check |
| y | second half-precision value to check |
| true | if either x or y is NaN |
| false | else |
| FE_INVALID | if x or y is NaN |
64-bit division.
| x | upper 32 bit of dividend |
| y | divisor |
| s | variable to store sticky bit for rounding |
| unsigned int half_float::detail::erf | ( | unsigned int | arg | ) |
Error function and postprocessing. This computes the value directly in Q1.31 using the approximations given here.
| R | rounding mode to use |
| C | true for comlementary error function, false else |
| arg | half-precision function argument |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if no other exception occurred |
|
inline |
Internal exception flags.
Fixed point binary exponential. This uses the BKM algorithm in E-mode.
| m | exponent in [0,1) as Q0.31 |
| n | number of iterations (at most 32) |
| unsigned int half_float::detail::exp2_post | ( | uint32 | m, |
| int | exp, | ||
| bool | esign, | ||
| unsigned int | sign = 0 |
||
| ) |
Postprocessing for binary exponential.
| R | rounding mode to use |
| I | true to always raise INEXACT exception, false to raise only for rounded results |
| m | mantissa as Q1.31 |
| exp | absolute value of unbiased exponent |
| esign | sign of actual exponent |
| sign | sign bit of result |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded or I is true |
| unsigned int half_float::detail::fixed2half | ( | uint32 | m, |
| int | exp = 14, |
||
| unsigned int | sign = 0, |
||
| int | s = 0 |
||
| ) |
Convert fixed point to half-precision floating-point.
| R | rounding mode to use |
| F | number of fractional bits (at least 11) |
| S | true for signed, false for unsigned |
| N | true for additional normalization step, false if already normalized to 1.F |
| I | true to always raise INEXACT exception, false to raise only for rounded results |
| m | mantissa in Q1.F fixed point format |
| exp | exponent |
| sign | half-precision value with sign bit only |
| s | sticky bit (or of all but the most significant already discarded bits) |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded or I is true |
| unsigned int half_float::detail::float2half | ( | T | value | ) |
Convert floating-point to half-precision.
| R | rounding mode to use |
| T | source type (builtin floating-point type) |
| value | floating-point value to convert |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::float2half_impl | ( | double | value, |
| true_type | |||
| ) |
Convert IEEE double-precision to half-precision.
| R | rounding mode to use |
| value | double-precision value to convert |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::float2half_impl | ( | float | value, |
| true_type | |||
| ) |
Convert IEEE single-precision to half-precision. Credit for this goes to Jeroen van der Zijp.
| R | rounding mode to use |
| value | single-precision value to convert |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::float2half_impl | ( | T | value, |
| ... | |||
| ) |
Convert non-IEEE floating-point to half-precision.
| R | rounding mode to use |
| T | source type (builtin floating-point type) |
| value | floating-point value to convert |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::gamma | ( | unsigned int | arg | ) |
Gamma function and postprocessing. This approximates the value of either the gamma function or its logarithm directly in Q1.31.
| R | rounding mode to use |
| L | true for lograithm of gamma function, false for gamma function |
| arg | half-precision floating-point value |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if arg is not a positive integer |
| T half_float::detail::half2float | ( | unsigned int | value | ) |
Convert half-precision to floating-point.
| T | type to convert to (builtin integer type) |
| value | half-precision value to convert |
|
inline |
Convert half-precision to IEEE double-precision.
| value | half-precision value to convert |
|
inline |
Convert half-precision to IEEE single-precision. Credit for this goes to Jeroen van der Zijp.
| value | half-precision value to convert |
| T half_float::detail::half2float_impl | ( | unsigned int | value, |
| T | , | ||
| ... | |||
| ) |
Convert half-precision to non-IEEE floating-point.
| T | type to convert to (builtin integer type) |
| value | half-precision value to convert |
| T half_float::detail::half2int | ( | unsigned int | value | ) |
Convert half-precision floating-point to integer.
| R | rounding mode to use |
| E | true for round to even, false for round away from zero |
| I | true to raise INEXACT exception (if inexact), false to never raise it |
| T | type to convert to (buitlin integer type with at least 16 bits precision, excluding any implicit sign bits) |
| value | half-precision value to convert |
| FE_INVALID | if value is not representable in type T |
| FE_INEXACT | if value had to be rounded and I is true |
|
inline |
Get exponentials for hyperbolic computation
| abs | half-precision floating-point value |
| exp | variable to take unbiased exponent of larger result |
| n | number of BKM iterations (at most 32) |
| unsigned int half_float::detail::hypot_post | ( | uint32 | r, |
| int | exp | ||
| ) |
Hypotenuse square root and postprocessing.
| R | rounding mode to use |
| r | mantissa as Q2.30 |
| exp | unbiased exponent |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::int2half | ( | T | value | ) |
Convert integer to half-precision floating-point.
| R | rounding mode to use |
| T | type to convert (builtin integer type) |
| value | integral value to convert |
| FE_OVERFLOW | on overflows |
| FE_INEXACT | if value had to be rounded |
| unsigned int half_float::detail::integral | ( | unsigned int | value | ) |
Round half-precision number to nearest integer value.
| R | rounding mode to use |
| E | true for round to even, false for round away from zero |
| I | true to raise INEXACT exception (if inexact), false to never raise it |
| value | half-precision value to round |
| FE_INVALID | for signaling NaN |
| FE_INEXACT | if value had to be rounded and I is true |
|
inline |
Raise domain error and return NaN. return quiet NaN
| FE_INVALID |
Fixed point binary logarithm. This uses the BKM algorithm in L-mode.
| m | mantissa in [1,2) as Q1.30 |
| n | number of iterations (at most 32) |
| unsigned int half_float::detail::log2_post | ( | uint32 | m, |
| int | ilog, | ||
| int | exp, | ||
| unsigned int | sign = 0 |
||
| ) |
Postprocessing for binary logarithm.
| R | rounding mode to use |
| L | logarithm for base transformation as Q1.31 |
| m | fractional part of logarithm as Q0.31 |
| ilog | signed integer part of logarithm |
| exp | biased exponent of result |
| sign | sign bit of result |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if no other exception occurred |
| unsigned int half_float::detail::mod | ( | unsigned int | x, |
| unsigned int | y, | ||
| int * | quo = NULL |
||
| ) |
Half precision positive modulus.
| Q | true to compute full quotient, false else |
| R | true to compute signed remainder, false for positive remainder |
| x | first operand as positive finite half-precision value |
| y | second operand as positive finite half-precision value |
| quo | adress to store quotient at, nullptr if Q false |
upper part of 64-bit multiplication.
| R | rounding mode to use |
| x | first factor |
| y | second factor |
64-bit multiplication.
| x | first factor |
| y | second factor |
| HALF_CONSTEXPR_NOERR unsigned int half_float::detail::overflow | ( | unsigned int | sign = 0 | ) |
Half-precision overflow.
| R | rounding mode to use |
| sign | half-precision value with sign bit only |
| FE_OVERFLOW |
|
inline |
Raise pole error and return infinity.
| sign | half-precision value with sign bit only |
| FE_DIVBYZERO |
|
inline |
Raise floating-point exception.
| flags | exceptions to raise |
| cond | condition to raise exceptions for |
| HALF_CONSTEXPR_NOERR unsigned int half_float::detail::rounded | ( | unsigned int | value, |
| int | g, | ||
| int | s | ||
| ) |
Round half-precision number.
| R | rounding mode to use |
| I | true to always raise INEXACT exception, false to raise only for rounded results |
| value | finite half-precision number to round |
| g | guard bit (most significant discarded bit) |
| s | sticky bit (or of all but the most significant discarded bits) |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if value had to be rounded or I is true |
|
inline |
Select value or signaling NaN.
| x | preferred half-precision value |
| y | ignored half-precision value except for signaling NaN |
| FE_INVALID | if y is signaling NaN |
Platform-independent sign mask.
| arg | integer value in two's complement |
| -1 | if arg negative |
| 0 | if arg positive |
|
inline |
Signal and silence signaling NaN.
| nan | half-precision NaN value |
| FE_INVALID | if nan is signaling NaN |
|
inline |
Signal and silence signaling NaNs.
| x | first half-precision value to check |
| y | second half-precision value to check |
| FE_INVALID | if x or y is signaling NaN |
|
inline |
Signal and silence signaling NaNs.
| x | first half-precision value to check |
| y | second half-precision value to check |
| z | third half-precision value to check |
| FE_INVALID | if x, y or z is signaling NaN |
Fixed point sine and cosine. This uses the CORDIC algorithm in rotation mode.
| mz | angle in [-pi/2,pi/2] as Q1.30 |
| n | number of iterations (at most 31) |
Fixed point square root.
| F | number of fractional bits |
| r | radicand in Q1.F fixed point format |
| exp | exponent |
| unsigned int half_float::detail::tangent_post | ( | uint32 | my, |
| uint32 | mx, | ||
| int | exp, | ||
| unsigned int | sign = 0 |
||
| ) |
Division and postprocessing for tangents.
| R | rounding mode to use |
| my | dividend as Q1.31 |
| mx | divisor as Q1.31 |
| exp | biased exponent of result |
| sign | sign bit of result |
| FE_OVERFLOW | on overflows |
| FE_UNDERFLOW | on underflows |
| FE_INEXACT | if no other exception occurred |
| HALF_CONSTEXPR_NOERR unsigned int half_float::detail::underflow | ( | unsigned int | sign = 0 | ) |
Half-precision underflow.
| R | rounding mode to use |
| sign | half-precision value with sign bit only |
| FE_UNDERFLOW |
| HALF_CONSTEXPR_CONST binary_t half_float::detail::binary = binary_t() |
Tag for binary construction.