Шестнадцатеричное представление плаваний в Haskell

Я хочу преобразовать Плавание Haskell в Строку, которая содержит 32-разрядное шестнадцатеричное представление плавания в стандартном формате IEEE. Я, может казаться, не нахожу пакет, который сделает это для меня. Кто-либо знает об одном?

Я заметил, что GHC.Float предлагает функцию для разложения Плавания на его основу со знаком и экспоненту (decodeFloat), но это обеспечивает 14-и 8-разрядное шестнадцатеричное число для основы и экспоненты, соответственно, который поднимает намного больше чем 32 бита. Это, кажется, не помогает.

Если существует более легкий способ сделать это, что я не вижу, сообщите мне.

7
задан mskfisher 10 May 2012 в 17:16
поделиться

3 ответа

Пакет float-ieee - это чистый Haskell-98, но очень интенсивно использует процессор. Если вам нужно делать это много раз и вы не против того, чтобы быть специфичным для GHC, тогда вы используете такой код, который извлекает 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 .

5
ответ дан 6 December 2019 в 21:13
поделиться

Используйте плагин google translate jquery. Я очень успешно использовал его для перевода текста в прошлом: http://code.google.com/p/jquery-translate/

-121--4320993-

Не точное решение, а другое решение. При использовании разметки

<div contenteditable="true">
<div>
content
</div>
<div>

нажатие enter создаст новый div тэгов вместо p тэгов.

-121--1363016-

Как насчет пакета float-ieee на Hackage? http://hackage.haskell.org/package/data-binary-ieee754

Распечатает значение 32 bit 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
4
ответ дан 6 December 2019 в 21:13
поделиться

Думаю, вы случайно декодировал Double вместо Float . Вот почему это не подходит.

1
ответ дан 6 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: