crackNum-1.0: Data/Numbers/CrackNum/Data.hs
---------------------------------------------------------------------------
-- |
-- Module : Data.Numbers.CrackNum.Data
-- Copyright : (c) Levent Erkok
-- License : BSD3
-- Maintainer : erkokl@gmail.com
-- Stability : experimental
--
-- Internal representation of FP values
-----------------------------------------------------------------------------
module Data.Numbers.CrackNum.Data where
-- | Floating point precision
data Precision = HP -- ^ Half precision; 16 bits = 1 sign + 5 exponent + 10 mantissa
| SP -- ^ Single precision; 32 bits = 1 sign + 8 exponent + 23 mantissa
| DP -- ^ Double precision; 64 bits = 1 sign + 11 exponent + 52 mantissa
deriving (Eq, Show)
-- | Integer/Word precision
data IPrecision = W8 -- ^ 8-bit unsigned (byte)
| I8 -- ^ 8-bit signed
| W16 -- ^ 16-bit unsigned (word)
| I16 -- ^ 16-bit signed
| W32 -- ^ 32-bit unsigned (double-word)
| I32 -- ^ 32-bit signed
| W64 -- ^ 64-bit unsigned (quad-word)
| I64 -- ^ 64-bit signed
deriving Eq
-- | Kinds of floating point values
data Kind = Zero Bool -- ^ Zero: 0. If Bool is true, then this is -0; otherwise +0.
| Infty Bool -- ^ Infinity: oo. If Bool is true, then this is -oo, otherwie +oo.
| SNaN -- ^ The screaming-NaN.
| QNaN -- ^ The quiet-NaN.
| Denormal -- ^ Denormalized number, i.e., leading bit is not 1
| Normal -- ^ Normal value.
-- | Show instance for integer-precisions
instance Show IPrecision where
show W8 = "Unsigned Byte"
show I8 = "Signed Byte"
show W16 = "Unsigned Word"
show I16 = "Signed Word"
show W32 = "Unsigned Double"
show I32 = "Signed Double"
show W64 = "Unsigned Quad"
show I64 = "Signed Quad"
-- | Complete internal representation for a floating-point number
data FP = FP { intVal :: Integer -- ^ The value as represented as a full Integer. Storage purposes only.
, prec :: Precision -- ^ FP precision.
, sign :: Bool -- ^ Sign. If True then negative, otherwise positive.
, stExpt :: Int -- ^ The exponent as it is stored.
, bias :: Int -- ^ The implicit bias of the exponent.
, expt :: Int -- ^ The actual exponent.
, fracBits :: [Bool] -- ^ Bits in the fractional part
, bitLayOut :: String -- ^ Layout representation
, kind :: Kind -- ^ Floating-point kind (i.e., value)
}