Mathematic Functions
Next listed are the mathematical functions provided by the library. The functions are pure C++ implementations with high precision and high performance, and implemented in the math.hpp header file.
The functions are implemented as template functions, which means that they can be used with any fixed point type provided by this library.
- min and max
min_value
max_value
- rounding functions
ceil/floor
trunc
round
- absolute value
abs
- square root
sqrt
- cube root
cbrt
- trigonometric functions
sin
cos
tan
atan
- logarithmic functions
log
log2
log10
- exponential functions
exp
pow
- degree/radian conversion
radians
degrees
Note
The implementation of max/min value functions used std::numeric_limits to get the max/min value of the fixed point type, so you need to make sure the store type has specialization for std::numeric_limits.
If not, the std::numeric_limits specialization of the fixed point type will calculate the max/min value with next formula:
- For the maximum value: ~static_cast<Type>(1) << (sizeof(Type) * 8 - 1)
- For the minimum value: static_cast<Type>(1) << (sizeof(Type) * 8 - 1)
Then, the log and log10 functions are calculated based on the formula of change of base of logarithms, and the log2 function is implemented first. Because there exists a fast binary logarithm used some tricks to calculate log2 faster.
#include <iostream>
#include <eirin/fixed.hpp>
#include <math.hpp>
int main()
{
using namespace eirin;
std::cout << "fixed64 max value: " << max_value<fixed64>() << std::endl;
std::cout << "fixed32 min value: " << min_value<fixed32>() << std::endl;
std::cout << "sqrt(114514): " << sqrt(114514_f64) << std::endl;
std::cout << "log2(514): " << log2(514_f32) << std::endl;
return 0;
}