Better idiv & imod implementation

This commit is contained in:
Nikita Lisitsa 2023-11-02 20:14:35 +03:00
parent 1584301a21
commit f9dda53c61

View file

@ -155,15 +155,17 @@ namespace psemek::geom
} }
template <typename T> template <typename T>
T idiv(T x, T m) T imod(T x, T m)
{ {
return (x >= 0) ? (x / m) : -((- x + m - 1) / m); static_assert(std::is_integral_v<T>);
return ((x % m) + m) % m;
} }
template <typename T> template <typename T>
T imod(T x, T m) T idiv(T x, T m)
{ {
return x - m * idiv(x, m); static_assert(std::is_integral_v<T>);
return (x - imod(x, m)) / m;
} }
template <typename T> template <typename T>