Files | Classes | Typedefs | Functions
Fixed Point

Files

file  fixed_point.hpp
 Class definition for fixed point data type.
 

Classes

struct  numeric::scaled_integer< Rep, >
 Helper struct for constructing fixed_point when value is already shifted. More...
 
class  numeric::fixed_point< Rep, Rad >
 A type for representing a number with a fixed amount of precision. More...
 

Typedefs

using numeric::decimal32 = fixed_point< int32_t, Radix::BASE_10 >
 
using numeric::decimal64 = fixed_point< int64_t, Radix::BASE_10 >
 
using numeric::decimal128 = fixed_point< __int128_t, Radix::BASE_10 >
 

Functions

template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::addition_overflow (T lhs, T rhs)
 Function for identifying integer overflow when adding. More...
 
template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::subtraction_overflow (T lhs, T rhs)
 Function for identifying integer overflow when subtracting. More...
 
template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::division_overflow (T lhs, T rhs)
 Function for identifying integer overflow when dividing. More...
 
template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::multiplication_overflow (T lhs, T rhs)
 Function for identifying integer overflow when multiplying. More...
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point< Rep1, Rad1 > numeric::operator+ (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point< Rep1, Rad1 > numeric::operator- (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point< Rep1, Rad1 > numeric::operator* (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point< Rep1, Rad1 > numeric::operator/ (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator== (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator!= (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator<= (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator>= (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator< (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator> (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 
template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point< Rep1, Rad1 > numeric::operator% (fixed_point< Rep1, Rad1 > const &lhs, fixed_point< Rep1, Rad1 > const &rhs)
 

Detailed Description

Function Documentation

◆ addition_overflow()

template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::addition_overflow ( lhs,
rhs 
)
inline

Function for identifying integer overflow when adding.

Template Parameters
RepType of integer to check for overflow on
TTypes of lhs and rhs (ensures they are the same type)
Parameters
lhsLeft hand side of addition
rhsRight hand side of addition
Returns
true if addition causes overflow, false otherwise

Definition at line 594 of file fixed_point.hpp.

◆ division_overflow()

template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::division_overflow ( lhs,
rhs 
)
inline

Function for identifying integer overflow when dividing.

Template Parameters
RepType of integer to check for overflow on
TTypes of lhs and rhs (ensures they are the same type)
Parameters
lhsLeft hand side of division
rhsRight hand side of division
Returns
true if division causes overflow, false otherwise

Definition at line 624 of file fixed_point.hpp.

◆ multiplication_overflow()

template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::multiplication_overflow ( lhs,
rhs 
)
inline

Function for identifying integer overflow when multiplying.

Template Parameters
RepType of integer to check for overflow on
TTypes of lhs and rhs (ensures they are the same type)
Parameters
lhsLeft hand side of multiplication
rhsRight hand side of multiplication
Returns
true if multiplication causes overflow, false otherwise

Definition at line 638 of file fixed_point.hpp.

◆ operator!=()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator!= ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs and rhs are not equal, false if not

Definition at line 724 of file fixed_point.hpp.

◆ operator%()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point<Rep1, Rad1> numeric::operator% ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, the modulus is computed directly. If _scales are not equal, the number with larger _scale is shifted to the smaller _scale, and then the modulus is computed.

Template Parameters
Rep1Representation type of number being modulo-ed to this
Rad1Radix (base) type of number being modulo-ed to this
Returns
The resulting fixed_point number

Definition at line 769 of file fixed_point.hpp.

◆ operator*()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point<Rep1, Rad1> numeric::operator* ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

_scales are added and _values are multiplied.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
The resulting fixed_point product

Definition at line 685 of file fixed_point.hpp.

◆ operator+()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point<Rep1, Rad1> numeric::operator+ ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are added. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are added.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
The resulting fixed_point sum

Definition at line 649 of file fixed_point.hpp.

◆ operator-()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point<Rep1, Rad1> numeric::operator- ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are subtracted. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are subtracted.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
The resulting fixed_point difference

Definition at line 667 of file fixed_point.hpp.

◆ operator/()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE fixed_point<Rep1, Rad1> numeric::operator/ ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

_scales are subtracted and _values are divided.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
The resulting fixed_point quotient

Definition at line 700 of file fixed_point.hpp.

◆ operator<()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator< ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs less than rhs, false if not

Definition at line 751 of file fixed_point.hpp.

◆ operator<=()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator<= ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs less than or equal to rhs, false if not

Definition at line 733 of file fixed_point.hpp.

◆ operator==()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator== ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs and rhs are equal, false if not

Definition at line 715 of file fixed_point.hpp.

◆ operator>()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator> ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs greater than rhs, false if not

Definition at line 760 of file fixed_point.hpp.

◆ operator>=()

template<typename Rep1 , Radix Rad1>
CUDF_HOST_DEVICE bool numeric::operator>= ( fixed_point< Rep1, Rad1 > const &  lhs,
fixed_point< Rep1, Rad1 > const &  rhs 
)
inline

If _scales are equal, _values are compared. If _scales are not equal, the number with the larger _scale is shifted to the smaller _scale, and then the _values are compared.

Template Parameters
Rep1Representation type of number being added to this
Rad1Radix (base) type of number being added to this
Returns
true if lhs greater than or equal to rhs, false if not

Definition at line 742 of file fixed_point.hpp.

◆ subtraction_overflow()

template<typename Rep , typename T >
CUDF_HOST_DEVICE auto numeric::subtraction_overflow ( lhs,
rhs 
)
inline

Function for identifying integer overflow when subtracting.

Template Parameters
RepType of integer to check for overflow on
TTypes of lhs and rhs (ensures they are the same type)
Parameters
lhsLeft hand side of subtraction
rhsRight hand side of subtraction
Returns
true if subtraction causes overflow, false otherwise

Definition at line 609 of file fixed_point.hpp.