summaryrefslogtreecommitdiff
path: root/src/core/math_func.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/math_func.hpp')
-rw-r--r--src/core/math_func.hpp12
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 */