Math Lib: add divide_floor_i
authorCampbell Barton <ideasman42@gmail.com>
Mon, 18 Sep 2017 03:14:58 +0000 (13:14 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 18 Sep 2017 03:18:50 +0000 (13:18 +1000)
Integer division that floors on negative output (like Python's).

source/blender/blenlib/intern/math_base_inline.c

index 6574c00..5ae2b1a 100644 (file)
@@ -193,6 +193,17 @@ MINLINE int divide_round_i(int a, int b)
        return (2 * a + b) / (2 * b);
 }
 
+/**
+ * Integer division that floors negative result.
+ * \note This works like Python's int division.
+ */
+MINLINE int divide_floor_i(int a, int b)
+{
+       int d = a / b;
+       int r = a % b;  /* Optimizes into a single division. */
+       return r ? d - ((a < 0) ^ (b < 0)) : d;
+}
+
 /**
  * modulo that handles negative numbers, works the same as Python's.
  */