1#ifndef CPP_UTILITIES_DIMENSIONALANALYSIS_RATIO_HPP
2#define CPP_UTILITIES_DIMENSIONALANALYSIS_RATIO_HPP
28 auto mod = [](
long double a,
long double b) ->
long double {
29 while (a >= b) a -= b;
33 auto gcd = [mod](
long double x,
long double y)
34 -> std::pair<long double, long double> {
37 long double c = mod(a, b);
44 return std::make_pair(x / b, y / b);
46 long double den = std::pow(
static_cast<long double>(10), n);
47 long double num = value * std::pow(
static_cast<long double>(10), n);
48 std::pair<long double, long double> pair = gcd(num, den);
49 return std::make_pair(intmax_t(std::round(pair.first)),
50 intmax_t(std::round(pair.second)));
#define UTILITIES_NAMESPACE_END
Define for end namespace declaration, nothing will be generated if UTILITIES_NAMESPACE isn't defined.
Definition: Common.h:92
#define UTILITIES_NAMESPACE_BEGIN
Define for begin namespace declaration, nothing will be generated if UTILITIES_NAMESPACE isn't define...
Definition: Common.h:91
Namespace for all classes, typedefs and functions of dimensional analyse. See Dimensional Analysis fo...
std::pair< intmax_t, intmax_t > approximateRatio(long double value, int n)
Calculate approximate fraction from input decimal.
Definition: Ratios.hpp:25