Copyright | (c) 2011 Daniel Fischer |
---|---|

License | MIT |

Maintainer | Daniel Fischer <daniel.is.fischer@googlemail.com> |

Stability | Provisional |

Portability | Non-portable (GHC extensions) |

Safe Haskell | None |

Language | Haskell2010 |

Low level stuff for integer logarithms.

- integerLogBase# :: Integer -> Integer -> Int#
- integerLog2# :: Integer -> Int#
- wordLog2# :: Word# -> Int#

# Functions

integerLogBase# :: Integer -> Integer -> Int# #

Calculate the integer logarithm for an arbitrary base.

The base must be greater than `1`

, the second argument, the number
whose logarithm is sought, shall be positive, otherwise the
result is meaningless.

The following property holds

base ^`integerLogBase#`

base m <= m < base ^(`integerLogBase#`

base m + 1)

for `base > 1`

and `m > 0`

.

Note: Internally uses `integerLog2#`

for base 2

integerLog2# :: Integer -> Int# #

Calculate the integer base 2 logarithm of an `Integer`

. The
calculation is more efficient than for the general case, on
platforms with 32- or 64-bit words much more efficient.

The argument must be strictly positive, that condition is *not* checked.