[Sound-open-firmware] [PATCH 01/10] math: Comment for the innerworkings of ceil_divide() Signed-off-by: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
Liam Girdwood
liam.r.girdwood at linux.intel.com
Thu Jun 21 12:11:59 CEST 2018
From: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
math: ceil_divide - Check the signs of the dividant and divisor before rounding
Signed-off-by: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
---
src/include/sof/math/numbers.h | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/include/sof/math/numbers.h b/src/include/sof/math/numbers.h
index 5aacd8b..4ba812a 100644
--- a/src/include/sof/math/numbers.h
+++ b/src/include/sof/math/numbers.h
@@ -48,7 +48,15 @@ static inline int ceil_divide(int a, int b)
int c;
c = a / b;
- if (c * b < a)
+
+ /* First, we check whether the signs of the params are different.
+ * If they are, we already know the result is going to be negative and
+ * therefore, is going to be already rounded up (truncated).
+ *
+ * If the signs are the same, we check if there was any remainder in
+ * the division by multiplying the number back.
+ */
+ if (!((a ^ b) & (1 << ((sizeof(int) * 8) - 1))) && c * b != a)
c++;
return c;
--
2.17.0
More information about the Sound-open-firmware
mailing list