diff options
Diffstat (limited to 'src/core/math_func.hpp')
-rw-r--r-- | src/core/math_func.hpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index 8f31dd273..19f2f53d6 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -330,14 +330,20 @@ static FORCEINLINE uint CeilDiv(uint a, uint b) } /** - * Computes round(a / b) for non-negative a and b. + * Computes round(a / b) for signed a and unsigned b. * @param a Numerator * @param b Denominator * @return Quotient, rounded to nearest */ -static FORCEINLINE uint RoundDiv(uint a, uint b) +static FORCEINLINE int RoundDivSU(int a, uint b) { - return (a + b / 2) / b; + if (a > 0) { + /* 0.5 is rounded to 1 */ + return (a + (int)b / 2) / (int)b; + } else { + /* -0.5 is rounded to 0 */ + return (a - ((int)b - 1) / 2) / (int)b; + } } #endif /* MATH_FUNC_HPP */ |