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>
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>
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>