#------------------------------------------------------------------------------- func floorLog2* (x : int) : int = var k = -1 var y = x while (y > 0): k += 1 y = y shr 1 return k func ceilingLog2* (x : int) : int = if (x==0): return -1 else: return (floorLog2(x-1) + 1) # # import std/math # # proc sanityCheckLog2* () = # for i in 0..18: # let x = float64(i) # echo( i," | ",floorLog2(i),"=",floor(log2(x))," | ",ceilingLog2(i),"=",ceil(log2(x)) ) # #-------------------------------------------------------------------------------