Data.Numbers.FloatingHex

Description

See: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, pages 57-58. We slightly diverge from the standard and do not allow for the "floating-suffix," as the type inference of Haskell makes this unnecessary.

Synopsis

## QuasiQuoting

A quasiquoter for hexadecimal floating-point literals. See: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, pages 57-58. We slightly diverge from the standard and do not allow for the "floating-suffix," as the type inference of Haskell makes this unnecessary.

Example:

{-# LANGUAGE QuasiQuotes #-}
import Data.Numbers.FloatingHex

f :: Double
f = [hf|0x1.f44abd5aa7ca4p+25|]

With these definitions, f will be equal to the number 6.5574266708245546e7

class RealFloat a => FloatingHexReader a where Source #

Due to intricacies of conversion between Float and Double types (see http://ghc.haskell.org/trac/ghc/ticket/3676), we explicitly introduce a class to do the reading properly.

Minimal complete definition

Methods

Convert a hex-float from a string, if possible.

Instances

 Source # The Double instance Methods Source # The Float instance Methods

## Showing hex-floats

showHFloat :: RealFloat a => a -> ShowS Source #

Show a floating-point value in the hexadecimal format, similar to the %a specifier in C's printf.

>>> showHFloat (212.21 :: Double) ""
"0x1.a86b851eb851fp7"
>>> showHFloat (-12.76 :: Float) ""
"-0x1.9851ecp3"
>>> showHFloat (-0 :: Double) ""
"-0x0p+0"