@@ -108,14 +108,15 @@ posDecimal marr off0 ds v0 = go (off0 + ds - 1) v0
108 where go off v
108 where go off v
109 | v >= 100 = do
109 | v >= 100 = do
110 let (q, r) = v `quotRem` 100
110 let (q, r) = v `quotRem` 100
111− write2 off (r + r)
111+ write2 off r
112 go (off - 2) q
112 go (off - 2) q
113 | v < 10 = unsafeWrite marr off (i2w v)
113 | v < 10 = unsafeWrite marr off (i2w v)
114− | otherwise = write2 off (v + v)
114+ | otherwise = write2 off v
115− write2 off i = do
115+ write2 off i0 = do
116+ let i = fromIntegral i0; j = i + i
116− unsafeWrite marr off $ get (i + 1)
117+ unsafeWrite marr off $ get (j + 1)
117− unsafeWrite marr (off - 1) $ get i
118+ unsafeWrite marr (off - 1) $ get j
118− get i = fromIntegral $ B.unsafeIndex digits (fromIntegral i) :: Word16
119+ get = fromIntegral . B.unsafeIndex digits
120minus, zero :: Word16
121minus, zero :: Word16
121{-# INLINE minus #-}
122{-# INLINE minus #-}