diff --git a/amxmodx/power.cpp b/amxmodx/power.cpp index 0dfb2431..74f6f2b8 100755 --- a/amxmodx/power.cpp +++ b/amxmodx/power.cpp @@ -19,10 +19,19 @@ static cell power(AMX *amx, cell *params) /* power(value, exponent); * params[1] = value * params[2] = exponent + * Exponentiation by squaring */ cell result = 1; - while (params[2]-- > 0) - result *= params[1]; + cell value = params[1]; + cell exp = params[2]; + while (exp > 0) { + if (exp & 1) { + result *= value; + } /* if */ + value *= value; + exp >>= 1; + } /* while */ + return result; }