##// END OF EJS Templates
Few methods added to ease integration in existing GUI...
Few methods added to ease integration in existing GUI Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r9:b3317a5111ec
r25:5f4f9560990b
Show More
Numeric.h
26 lines | 720 B | text/x-c | CLexer
#ifndef NUMERIC_H
#define NUMERIC_H
#include <cmath>
#include <limits>
#include <type_traits>
#include <algorithm>
namespace SciQLop::numeric {
/*
taken from here https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
*/
template<class T>
typename std::enable_if<!std::numeric_limits<T>::is_integer, bool>::type
almost_equal(T x, T y, int ulp=1)
{
// the machine epsilon has to be scaled to the magnitude of the values used
// and multiplied by the desired precision in ULPs (units in the last place)
return std::abs(x-y) <= std::numeric_limits<T>::epsilon() * std::abs(x+y) * ulp
// unless the result is subnormal
|| std::abs(x-y) < std::numeric_limits<T>::min();
}
}
#endif