08/10/02 01:06:55
>>799
問題ある
>>797は、バイナリモードで開いた上でgetContentsすればいい、という意味で言った
>>798
確かにそうだな
ちゃんとテストしてないけど一応こんなんでいけるみたいだ
import Data.Bits
import Data.Word
w32ToFloat :: Word32 -> Float
w32ToFloat w
| ep == 255 && sf /= 0 = 0 / 0
| sf == 255 = sign / 0
| sf == 0 && ep == 0 = sign * 0
| otherwise = sign * encodeFloat r e
where
sn = shiftR w 31
ep = shiftR w 23 .&. 0xff
sf = w .&. 0x7fffff
sign = if sn == 1 then -1 else 1
e = fromIntegral ep - 127 - 23
r = fromIntegral sf + 0x800000