From bdf6393c98cf87d1e67e6b664037a00383806ffe Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 24 Apr 2015 11:37:48 +1000 Subject: [PATCH] Math Lib: pow_i for int power-of --- source/blender/blenlib/BLI_math_base.h | 1 + source/blender/blenlib/intern/math_base.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h index ae2b6a4da9f..79a2d57c966 100644 --- a/source/blender/blenlib/BLI_math_base.h +++ b/source/blender/blenlib/BLI_math_base.h @@ -214,6 +214,7 @@ MINLINE int iroundf(float a); MINLINE int divide_round_i(int a, int b); MINLINE int mod_i(int i, int n); +int pow_i(int base, int exp); double double_round(double x, int ndigits); #ifdef BLI_MATH_GCC_WARN_PRAGMA diff --git a/source/blender/blenlib/intern/math_base.c b/source/blender/blenlib/intern/math_base.c index cddfde371f5..0a1e9e8a8a1 100644 --- a/source/blender/blenlib/intern/math_base.c +++ b/source/blender/blenlib/intern/math_base.c @@ -31,6 +31,21 @@ #include "BLI_strict_flags.h" +int pow_i(int base, int exp) +{ + int result = 1; + BLI_assert(exp >= 0); + while (exp) { + if (exp & 1) { + result *= base; + } + exp >>= 1; + base *= base; + } + + return result; +} + /* from python 3.1 floatobject.c * ndigits must be between 0 and 21 */ double double_round(double x, int ndigits)