From f9dda53c61adec3b28a2df1709908da1a22d40e1 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 2 Nov 2023 20:14:35 +0300 Subject: [PATCH] Better idiv & imod implementation --- libs/geom/include/psemek/geom/math.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libs/geom/include/psemek/geom/math.hpp b/libs/geom/include/psemek/geom/math.hpp index b74dc013..8e3d832d 100644 --- a/libs/geom/include/psemek/geom/math.hpp +++ b/libs/geom/include/psemek/geom/math.hpp @@ -155,15 +155,17 @@ namespace psemek::geom } template - 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); + return ((x % m) + m) % m; } template - T imod(T x, T m) + T idiv(T x, T m) { - return x - m * idiv(x, m); + static_assert(std::is_integral_v); + return (x - imod(x, m)) / m; } template