Jer*_*emy 7 floating-point hex haskell ieee-754
我想将Haskell Float转换为包含标准IEEE格式的float的32位十六进制表示的String.我似乎找不到能为我做这件事的套餐.有人知道吗?
我注意到GHC.Float提供了一个函数来将Float分解为其带符号的基数和指数(decodeFloat),但是它分别为基数和指数提供了14位和8位十六进制数,这会占用更多超过32位.这似乎没有帮助.
如果有一种更简单的方法可以做到这一点,我没有看到,请告诉我.
float-ieee包是纯Haskell-98,但CPU密集型.如果你需要多次这样做,并且不介意GHC特定,那么你使用这样的代码,它将a的IEEE表示提取Double为Word64:
import GHC.Prim
import GHC.Types
import GHC.Word
encodeIEEEDouble :: Double -> Word64
encodeIEEEDouble (D# x) = W64# (unsafeCoerce# x)
decodeIEEEDouble :: Word64 -> Double
decodeIEEEDouble (W64# x) = D# (unsafeCoerce# x)
您可以为Float和编写类似的代码Word32.
Hackage 上的 float-ieee 包怎么样?http://hackage.haskell.org/package/data-binary-ieee754
将打印一个 32 位 ieee754 字符串值,表示传入的浮点数。
import Data.Binary.Put
import Data.Binary.IEEE754
import qualified Data.ByteString.Lazy.Char8 as S
main = do
    let s = runPut $ putFloat32be pi
    S.putStrLn s