Kodi Documentation 22.0
Kodi is an open source media player and entertainment hub.
Loading...
Searching...
No Matches
MathUtils Namespace Reference

Math utility class. Note that the test() routine should return true for all implementations. More...

Functions

int round_int (double x)
 Round to nearest integer. This routine does fast rounding to the nearest integer. In the case (k + 0.5 for any integer k) we round up to k+1, and in all other instances we should return the nearest integer. Thus, { -1.5, -0.5, 0.5, 1.5 } is rounded to { -1, 0, 1, 2 }. It preserves the property that round(k) - round(k-1) = 1 for all doubles k.
 
int truncate_int (double x)
 Truncate to nearest integer. This routine does fast truncation to an integer. It should simply drop the fractional portion of the floating point number.
 
int64_t abs (int64_t a)
 
unsigned bitcount (unsigned v)
 
void hack ()
 
template<typename FloatT >
bool FloatEquals (FloatT f1, FloatT f2, FloatT maxDelta)
 
template<typename T , std::enable_if_t< std::is_floating_point< T >::value, bool > = true>
RoundF (const T value, const T multiple)
 Round a floating point number to nearest multiple.
 

Detailed Description

Math utility class. Note that the test() routine should return true for all implementations.

See http://ldesoras.free.fr/doc/articles/rounding_en.pdf for an explanation of the technique used on x86.

Function Documentation

◆ abs()

int64_t MathUtils::abs ( int64_t a)
inline

◆ bitcount()

unsigned MathUtils::bitcount ( unsigned v)
inline

◆ FloatEquals()

template<typename FloatT >
bool MathUtils::FloatEquals ( FloatT f1,
FloatT f2,
FloatT maxDelta )
inline

Compare two floating-point numbers for equality and regard them as equal if their difference is below a given threshold.

It is usually not useful to compare float numbers for equality with the standard operator== since very close numbers might have different representations.

◆ hack()

void MathUtils::hack ( )
inline

◆ round_int()

int MathUtils::round_int ( double x)
inline

Round to nearest integer. This routine does fast rounding to the nearest integer. In the case (k + 0.5 for any integer k) we round up to k+1, and in all other instances we should return the nearest integer. Thus, { -1.5, -0.5, 0.5, 1.5 } is rounded to { -1, 0, 1, 2 }. It preserves the property that round(k) - round(k-1) = 1 for all doubles k.

Make sure MathUtils::test() returns true for each implementation.

See also
truncate_int, test

◆ RoundF()

template<typename T , std::enable_if_t< std::is_floating_point< T >::value, bool > = true>
T MathUtils::RoundF ( const T value,
const T multiple )
inline

Round a floating point number to nearest multiple.

Parameters
valueThe value to round
multipleThe multiple
Returns
The rounded value

◆ truncate_int()

int MathUtils::truncate_int ( double x)
inline

Truncate to nearest integer. This routine does fast truncation to an integer. It should simply drop the fractional portion of the floating point number.

Make sure MathUtils::test() returns true for each implementation.

See also
round_int, test