muldiv.h File Reference
#include <limits>
#include <ratio>
#include <esp_attr.h>
#include <sming_attr.h>
Include dependency graph for muldiv.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  MuldivLimits< num, den, ValType >
 Obtain limits for a muldiv template calculation. More...
 

Functions

template<typename ValType >
ValType muldivMaxValue (ValType num, ValType den)
 Get the maximum value which can be passed to muldiv() without overflowing. More...
 
template<typename ValType , typename NumDenType >
ValType muldiv (const ValType &value, const NumDenType &num, const NumDenType &den)
 Perform muldiv using unsigned integer types. More...
 
uint32_t muldiv32 (uint32_t value, uint32_t num, uint32_t den)
 Perform muldiv using 32-bit values. More...
 
uint64_t muldiv64 (const uint64_t &value, const uint64_t &num, const uint64_t &den)
 Perform muldiv using 64-bit values. More...
 
template<uint64_t num, uint64_t den, typename ValType >
ValType muldiv (const ValType &value)
 Templated muldiv version so numerator and denominator are pre-calculated. More...
 

Function Documentation

◆ muldiv() [1/2]

template<uint64_t num, uint64_t den, typename ValType >
ValType muldiv ( const ValType &  value)

Templated muldiv version so numerator and denominator are pre-calculated.

Template Parameters
num
den
ValType
Parameters
value
Return values
ValTypeReturns numeric_limits<ValType>::max() on overflow (same as ValType(-1))

◆ muldiv() [2/2]

template<typename ValType , typename NumDenType >
ValType muldiv ( const ValType &  value,
const NumDenType &  num,
const NumDenType &  den 
)

Perform muldiv using unsigned integer types.

Template Parameters
ValType
NumDenType
Parameters
value
num
den
Return values
ToTypeReturns numeric_limits<ToType>::max() on overflow (same as ValType(-1))

◆ muldiv32()

uint32_t muldiv32 ( uint32_t  value,
uint32_t  num,
uint32_t  den 
)

Perform muldiv using 32-bit values.

Parameters
value
num
den
Return values
uint32_t
Note
Calculation will still use uint64_t internally if necessary to prevent overflow

◆ muldiv64()

uint64_t muldiv64 ( const uint64_t &  value,
const uint64_t &  num,
const uint64_t &  den 
)

Perform muldiv using 64-bit values.

Parameters
value
num
den
Return values
uint32_t
Note
If calculation overflows there is always floating point, but will probably require double precision

◆ muldivMaxValue()

template<typename ValType >
ValType muldivMaxValue ( ValType  num,
ValType  den 
)

Get the maximum value which can be passed to muldiv() without overflowing.

Template Parameters
ValType
Parameters
num
den
Return values
ValTypeValues greater than this will cause muldiv to return ValType(-1), i.e. range maximum