/ reference / haskell / src / Misc.hs
Misc.hs
 1  
 2  module Misc where
 3  
 4  --------------------------------------------------------------------------------
 5  
 6  import Data.Bits
 7  
 8  --------------------------------------------------------------------------------
 9  
10  -- | Smallest integer @k@ such that @2^k@ is larger or equal to @n@
11  ceilingLog2 :: Integer -> Int
12  ceilingLog2 0 = 0
13  ceilingLog2 n = 1 + go (n-1) where
14    go 0 = -1
15    go k = 1 + go (shiftR k 1)
16  
17  --------------------------------------------------------------------------------