diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2014-11-29 12:18:25 +0100 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2014-11-29 18:39:07 +0100 |
commit | d0d4674281a80e4148a82f833948c2b4c3051eab (patch) | |
tree | e4e5d62ae7a5dc4c0784f825cc9d9bbbc4d95459 /testsuite/tests/lib | |
parent | a809eaba4bab96e94f2dc8fe6b617c5c6f8fd565 (diff) | |
download | haskell-d0d4674281a80e4148a82f833948c2b4c3051eab.tar.gz |
Re-implement `powModInteger` (#9281)
This also exposes the following type-specialised modular exponentiation
variants of `powModInteger` useful for implementing a `powModNatural`
operation.
powModBigNat :: BigNat -> BigNat -> BigNat -> BigNat
powModBigNatWord :: BigNat -> BigNat -> Word# -> Word#
powModWord :: Word# -> Word# -> Word# -> Word#
`powModInteger` has been available since `integer-gmp-0.5.1`
(added via 4d516855241b70eb687d95e3c121428de885e83e)
Diffstat (limited to 'testsuite/tests/lib')
-rw-r--r-- | testsuite/tests/lib/integer/integerGmpInternals.hs | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/testsuite/tests/lib/integer/integerGmpInternals.hs b/testsuite/tests/lib/integer/integerGmpInternals.hs index 5db0b099ae..d281b739d4 100644 --- a/testsuite/tests/lib/integer/integerGmpInternals.hs +++ b/testsuite/tests/lib/integer/integerGmpInternals.hs @@ -47,19 +47,8 @@ gcdExtInteger a b = (d, u) -- stolen from `arithmoi` package powModSecInteger :: Integer -> Integer -> Integer -> Integer powModSecInteger = powModInteger --- FIXME: Lacks GMP2 version powModInteger :: Integer -> Integer -> Integer -> Integer -powModInteger b0 e0 m - | e0 >= 0 = go b0 e0 1 - | otherwise = error "non-neg exponent required" - where - go !b e !r - | odd e = go b' e' (r*b `mod` m) - | e == 0 = r - | otherwise = go b' e' r - where - b' = b*b `mod` m - e' = e `unsafeShiftR` 1 -- slightly faster than "e `div` 2" +powModInteger = I.powModInteger -- FIXME: Lacks GMP2 version powInteger :: Integer -> Word -> Integer |