任意の数は、次のように数Word32
の線形結合として表すことができます。Word8
x = a + b * 2^8 + c * 2^16 + d * 2^24
つまり、これはx
base での の表現です2^8
。これらの要因を取得するために、次の関数を実装しました。
word32to8 :: Word32 -> (Word8,Word8,Word8,Word8)
word32to8 n = (fromIntegral a,fromIntegral b,fromIntegral c,fromIntegral d)
where
(d,r1) = divMod n (2^24)
(c,r2) = divMod r1 (2^16)
(b,a) = divMod r2 (2^8)
適切に動作しますが、私のプログラムはこの関数を何度も使用しているため、この操作のパフォーマンスを (可能であれば) 改善する方法を教えてください。時間的にも空間的にも、小さな改善は私にとって良いことです。私には、パフォーマンスの改善が達成できないほど単純に見えますが、何か不足している場合に備えて、それでも質問したかったのです。
ちなみに の繰り返しばかりでイライラするのfromIntegral
ですが、型を合わせるためには変換が必要です。
前もって感謝します。