variable-precision-0.2: pure/Numeric/VariablePrecision/Integer/Logarithm.hs
{-# LANGUAGE BangPatterns #-}
module Numeric.VariablePrecision.Integer.Logarithm where
import Data.Bits (shiftL)
integerLog2 :: Integer -> Int
integerLog2 n
| n > 0 = go (-1) 1
| otherwise = error $ "integerLog2: non-positive argument: " ++ show n
where
go !l !b
| n < b = l
| otherwise = go (l + 1) (b `shiftL` 1)