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 timevar, 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  timevar,
ValType  num,
ValType  den 
)

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

Template Parameters
ValType
Parameters
timevarResult depends on size of variable used
num
den
Return values
ValTypeValues greater than this will cause muldiv to return ValType(-1), i.e. range maximum