function NextPowerOfTwo takes real input returns real
return input * 2
endfunction
um, given some number, e.g. 2:
JASS:function NextPowerOfTwo takes real input returns real return input * 2 endfunction
If you input 2, it will return the next power of 2 (e.g. 4). If you input 64 (2^6), it will return 128 (2^7).
EDIT: n of 2^n would just be ln(result) / ln(2):
http://www.wc3c.net/showthread.php?t=103494
EDIT2: if you explain a bit better, there can be a better solution (if you are just working with powers of 2).
function NextPow2 takes integer n returns integer
local integer currentPow = 1
local integer currentRaw = 2
loop
exitwhen currentRaw >= n
set currentPow = currentPow + 1
set currentRaw = currentRaw * 2
endloop
return currentPow
endfunction
library NextPow2 initializer Init
globals
private integer array pow
// pivot point of list (for first comparison)
private constant integer PIVOT = 15
endglobals
function NextPow2 takes integer number returns integer
local integer first = 0
local integer last = 31
local integer middle = PIVOT
if number < 1 then
return -1
endif
loop
exitwhen (last - first) == 1
if number == pow[middle] then
return middle
elseif number > pow[middle] then
set first = middle
elseif number < pow[middle] then
set last = middle
endif
set middle = (first + last) / 2
endloop
return last
endfunction
private function Init takes nothing returns nothing
local integer i = 1
set pow[0] = 1
set pow[31] = 2147483647
loop
exitwhen i == 31
set pow[i] = pow[i - 1] * 2
set i = i + 1
endloop
endfunction
endlibrary