fixed

Pure Haskell large fixed-width integers.
git clone git://git.ppad.tech/fixed.git
Log | Files | Refs | README | LICENSE

commit 3fbc3386465f093cb5b3b572f80b43e9ae92aeac
parent 02d81a9ef2edc4293919a46a25f1d71ecbc66611
Author: Jared Tobin <jared@jtobin.io>
Date:   Tue,  4 Feb 2025 11:51:21 +0400

lib: quotrem, 256-bit by 64-bit

Diffstat:
Mlib/Data/Word/Extended.hs | 12++++++++++++
1 file changed, 12 insertions(+), 0 deletions(-)

diff --git a/lib/Data/Word/Extended.hs b/lib/Data/Word/Extended.hs @@ -566,6 +566,18 @@ quotrem_by1 q u d = do !hl = PA.indexPrimArray u (l - 1) loop (l - 2) hl +quotrem_4by1# + :: (# Word64#, Word64#, Word64#, Word64# #) -- 256-bit dividend + -> Word64# -- 64-bit divisor + -> (# Word64#, Word64#, Word64#, Word64# #) -- 192-bit quotient, 64-bit rem +quotrem_4by1# (# u0, u1, u2, u3 #) d = + let !rec = recip_2by1# d + !(# q2, r2 #) = quotrem_2by1# u3 u2 d rec + !(# q1, r1 #) = quotrem_2by1# r2 u1 d rec + !(# q0, r0 #) = quotrem_2by1# r1 u0 d rec + in (# q0, q1, q2, r0 #) +{-# INLINE quotrem_4by1# #-} + rem_by1 :: PA.PrimArray Word64 -- variable-length dividend -> Word64 -- divisor