22 requires std::is_arithmetic_v<T>
25 return std::abs(a - b) <= tolerance;
33 template <std::ranges::range Range>
34 requires std::is_arithmetic_v<std::ranges::range_value_t<Range>>
37 const auto distA = std::distance(std::cbegin(a), std::cend(a));
38 const auto distB = std::distance(std::cbegin(b), std::cend(b));
44 auto iterA = std::cbegin(a);
45 auto iterB = std::cbegin(b);
46 while (iterA != std::cend(a))
48 if (!
isEqual(*iterA, *iterB, tolerance))
65 requires std::is_arithmetic_v<T>
68 return isEqual(num,
static_cast<T
>(0), tolerance);
79 template <
typename T, std::
floating_po
int FP>
80 T
lerp(
const T a,
const T b,
const FP alpha)
82 if (alpha < FP(0) || alpha > FP(1))
84 throw std::invalid_argument(
85 "The alpha must be ranged from 0 to 1, but given value is " + std::to_string(alpha)
89 return a * (FP(1) - alpha) + b * alpha;
Namespace for utility functions.
Definition util.h:11
bool isZero(const T num, const T tolerance=DEFAULT_TOLERANCE)
Definition util.h:66
T lerp(const T a, const T b, const FP alpha)
Definition util.h:80
bool isEqual(const T a, const T b, const T tolerance=DEFAULT_TOLERANCE)
Definition util.h:23
constexpr double DEFAULT_TOLERANCE
Definition util.h:15