-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Integer logarithms. -- -- Math.NumberTheory.Logarithms and -- Math.NumberTheory.Powers.Integer from the arithmoi package. -- -- Also provides GHC.Integer.Logarithms.Compat and -- Math.NumberTheory.Power.Natural modules, as well as some -- additional functions in migrated modules. @package integer-logarithms @version 1.0.2 -- | Potentially faster power function for Natural base and -- Int or Word exponent. -- | Deprecated: It is no faster than (^) module Math.NumberTheory.Powers.Natural -- | Power of an Natural by the left-to-right repeated squaring -- algorithm. This needs two multiplications in each step while the -- right-to-left algorithm needs only one multiplication for 0-bits, but -- here the two factors always have approximately the same size, which on -- average gains a bit when the result is large. -- -- For small results, it is unlikely to be any faster than '(^)', quite -- possibly slower (though the difference shouldn't be large), and for -- exponents with few bits set, the same holds. But for exponents with -- many bits set, the speedup can be significant. -- -- Warning: No check for the negativity of the exponent is -- performed, a negative exponent is interpreted as a large positive -- exponent. naturalPower :: Natural -> Int -> Natural -- | Same as naturalPower, but for exponents of type Word. naturalWordPower :: Natural -> Word -> Natural -- | Potentially faster power function for Integer base and -- Int or Word exponent. -- | Deprecated: It is no faster than (^) module Math.NumberTheory.Powers.Integer -- | Power of an Integer by the left-to-right repeated squaring -- algorithm. This needs two multiplications in each step while the -- right-to-left algorithm needs only one multiplication for 0-bits, but -- here the two factors always have approximately the same size, which on -- average gains a bit when the result is large. -- -- For small results, it is unlikely to be any faster than '(^)', quite -- possibly slower (though the difference shouldn't be large), and for -- exponents with few bits set, the same holds. But for exponents with -- many bits set, the speedup can be significant. -- -- Warning: No check for the negativity of the exponent is -- performed, a negative exponent is interpreted as a large positive -- exponent. integerPower :: Integer -> Int -> Integer -- | Same as integerPower, but for exponents of type Word. integerWordPower :: Integer -> Word -> Integer -- | Low level stuff for integer logarithms. module GHC.Integer.Logarithms.Compat -- | 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 integerLogBase# :: Integer -> 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. integerLog2# :: Integer -> Int# -- | Compute base-2 log of Word# -- -- This is internally implemented as count-leading-zeros machine -- instruction. wordLog2# :: Word# -> Int# -- | Integer Logarithms. For efficiency, the internal representation of -- Integers from integer-gmp is used. module Math.NumberTheory.Logarithms -- | Calculate the integer logarithm for an arbitrary base. The base must -- be greater than 1, the second argument, the number whose logarithm is -- sought, must be positive, otherwise an error is thrown. If base == -- 2, the specialised version is called, which is more efficient -- than the general algorithm. -- -- Satisfies: -- --
-- base ^ integerLogBase base m <= m < base ^ (integerLogBase base m + 1) ---- -- for base > 1 and m > 0. integerLogBase :: Integer -> Integer -> Int -- | Calculate the integer logarithm of an Integer to base 2. The -- argument must be positive, otherwise an error is thrown. integerLog2 :: Integer -> Int -- | Calculate the integer logarithm of an Integer to base 10. The -- argument must be positive, otherwise an error is thrown. integerLog10 :: Integer -> Int -- | Cacluate the integer logarithm for an arbitrary base. The base must be -- greater than 1, the second argument, the number whose logarithm is -- sought, must be positive, otherwise an error is thrown. If base == -- 2, the specialised version is called, which is more efficient -- than the general algorithm. -- -- Satisfies: -- --
-- base ^ integerLogBase base m <= m < base ^ (integerLogBase base m + 1) ---- -- for base > 1 and m > 0. naturalLogBase :: Natural -> Natural -> Int -- | Calculate the natural logarithm of an Natural to base 2. The -- argument must be non-zero, otherwise an error is thrown. naturalLog2 :: Natural -> Int -- | Calculate the integer logarithm of an Integer to base 10. The -- argument must be not zero, otherwise an error is thrown. naturalLog10 :: Natural -> Int -- | Calculate the integer logarithm of an Int to base 2. The -- argument must be positive, otherwise an error is thrown. intLog2 :: Int -> Int -- | Calculate the integer logarithm of a Word to base 2. The -- argument must be positive, otherwise an error is thrown. wordLog2 :: Word -> Int -- | Same as integerLogBase, but without checks, saves a little time -- when called often for known good input. integerLogBase' :: Integer -> Integer -> Int -- | Same as integerLog2, but without checks, saves a little time -- when called often for known good input. integerLog2' :: Integer -> Int -- | Same as integerLog10, but without a check for a positive -- argument. Saves a little time when called often for known good input. integerLog10' :: Integer -> Int -- | Same as intLog2, but without checks, saves a little time when -- called often for known good input. intLog2' :: Int -> Int -- | Same as wordLog2, but without checks, saves a little time when -- called often for known good input. wordLog2' :: Word -> Int