fixed

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

commit a0af65cb3fc152b81b72a7a7831e561fba7b25d3
parent a83f75c909a951baa219c35ae682b63b3fd8a3f8
Author: Jared Tobin <jared@jtobin.io>
Date:   Wed, 29 Jan 2025 19:25:30 +0400

lib: refactor working & passes tests

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

diff --git a/lib/Data/Word/Extended.hs b/lib/Data/Word/Extended.hs @@ -770,15 +770,17 @@ quotrem quo u d = do else do quotrem_knuth quo u (ulen + 1) dn -- unnormalize remainder - let unn_rem !j !un_j + let unn_rem !j !unj | j == dlen = do - PA.writePrimArray u (j - 1) (un_j .>>. shift) + PA.unsafeFreezePrimArray u + | j + 1 == ulen = do + PA.writePrimArray u j (unj .>>. shift) PA.unsafeFreezePrimArray u | otherwise = do - !un_j_1 <- PA.readPrimArray u (j + 1) - let !unn_j = (un_j .>>. shift) .|. (un_j_1 .<<. (64 - shift)) - PA.writePrimArray u j unn_j - unn_rem (j + 1) un_j_1 + !unj_1 <- PA.readPrimArray u (j + 1) + PA.writePrimArray u j $ + (unj .>>. shift) .|. (unj_1 .<<. (64 - shift)) + unn_rem (j + 1) unj_1 !un_0 <- PA.readPrimArray u 0 unn_rem 0 un_0