-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | The Posit Number format. Please see the README on GitHub at -- https://github.com/waivio/posit#readme @package posit @version 3.2.0.2 -- | Library implementing standard 'Posit-3.2' numbers, as defined by the -- Posit Working Group 23 June 2018. module Posit.Internal.PositC -- | The Posit class is an approximation of ℝ, it is like a -- sampling on the Projective Real line ℙ(ℝ) with Maybe ℚ as the internal -- type. The es is an index that controlls the log2 word size of -- the Posit's fininte precision representation. class (FixedWidthInteger (IntN es)) => PositC (es :: ES) -- | Transform to/from the Infinite Precision Representation encode :: PositC es => Maybe Rational -> IntN es decode :: PositC es => IntN es -> Maybe Rational -- | Exponent Size based on the Posit Exponent kind ES exponentSize :: PositC es => Natural -- | Various other size definitions used in the Posit format with their -- default definitions nBytes :: PositC es => Natural nBits :: PositC es => Natural signBitSize :: PositC es => Natural uSeed :: PositC es => Natural -- | Integer Representation of common bounds unReal :: PositC es => IntN es mostPosVal :: PositC es => IntN es leastPosVal :: PositC es => IntN es leastNegVal :: PositC es => IntN es mostNegVal :: PositC es => IntN es maxPosRat :: PositC es => Rational minPosRat :: PositC es => Rational maxNegRat :: PositC es => Rational minNegRat :: PositC es => Rational log_uSeed :: PositC es => (Integer, Rational) -> (Integer, Rational) getRegime :: PositC es => Rational -> (Integer, Rational) posit2TupPosit :: PositC es => Rational -> (Bool, Integer, Natural, Rational) buildIntRep :: PositC es => Rational -> IntN es mkIntRep :: PositC es => Integer -> Natural -> Rational -> IntN es formRegime :: PositC es => Integer -> (IntN es, Integer) formExponent :: PositC es => Natural -> Integer -> (IntN es, Integer) formFraction :: PositC es => Rational -> Integer -> IntN es tupPosit2Posit :: PositC es => (Bool, Integer, Natural, Rational) -> Maybe Rational regime2Integer :: PositC es => IntN es -> (Integer, Int) findRegimeFormat :: PositC es => IntN es -> Bool countRegimeBits :: PositC es => Bool -> IntN es -> Int exponent2Nat :: PositC es => Int -> IntN es -> Natural fraction2Posit :: PositC es => Int -> IntN es -> Rational displayBin :: PositC es => IntN es -> String decimalPrec :: PositC es => Int -- | The Exponent Size ES kind, the constructor for the Type is a -- Roman Numeral. data ES Z :: ES I :: ES II :: ES III :: ES IV :: ES V :: ES -- | Type of the Finite Precision Representation, in our case Int8, Int16, -- Int32, Int64, Int128, Int256. The es of kind ES will -- determine a result of r such that you can determine the -- es by the r type family IntN (es :: ES) = r | r -> es -- | The FixedWidthInteger is a Constraint Synonym that contains all -- of the constraints provided by the IntN Type Family. It is a -- super class for the Posit Class. type FixedWidthInteger a = (Bits a, Bounded a, Enum a, Integral a, Eq a, Ord a, Num a, Read a, Show a, Storable a) instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.Z instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.I instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.II instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.III instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.IV instance Posit.Internal.PositC.PositC 'Posit.Internal.PositC.V instance Foreign.Storable.Storable Data.DoubleWord.Word128 instance Foreign.Storable.Storable Data.DoubleWord.Int128 instance Foreign.Storable.Storable Data.DoubleWord.Int256 -- | Library implementing standard Posit Numbers (Posit Standard version -- 3.2.0.0, with some improvements) a fixed width word size of 2^es -- bytes. module Posit -- | Base GADT rapper type, that uses the Exponent Size kind to index the -- various implementations data Posit (es :: ES) type Posit8 = Posit Z type Posit16 = Posit I type Posit32 = Posit II type Posit64 = Posit III type Posit128 = Posit IV type Posit256 = Posit V -- | Not a Real Number, the Posit is like a Maybe type, it's either a real -- number or not pattern NaR :: PositC es => Posit es -- | A Real or at least Rational Number, rounded to the nearest Posit -- Rational representation pattern R :: PositC es => Rational -> Posit es -- | A class that delays the rounding operation until the end for some -- operations class Num a => FusedOps a -- | Fused Multiply Add: (a * b) + c fma :: FusedOps a => a -> a -> a -> a -- | Fused Add Multiply: (a + b) * c fam :: FusedOps a => a -> a -> a -> a -- | Fused Multiply Multiply Subtract: (a * b) - (c * d) fmms :: FusedOps a => a -> a -> a -> a -> a -- | Fused Sum of 3 values: a + b + c fsum3 :: FusedOps a => a -> a -> a -> a -- | Fused Sum of 4 values: a + b + c + d fsum4 :: FusedOps a => a -> a -> a -> a -> a -- | Fused Sum of a List of Posits fsumL :: (FusedOps a, Foldable t) => t a -> a -- | Fused Dot Product of 3 element vector: (a1 * b1) + (a2 * b2) + (a3 * -- b3) fdot3 :: FusedOps a => a -> a -> a -> a -> a -> a -> a -- | Fused Dot Product of 4 element vector: (a0 * b0) + (a1 * b1) + (a2 * -- b2) + (a3 * b3) fdot4 :: FusedOps a => a -> a -> a -> a -> a -> a -> a -> a -> a -- | Fused Dot Product of Two Lists fdotL :: (FusedOps a, Foldable t) => t a -> t a -> a -- | Fused Subtract Multiply: a - (b * c) fsm :: FusedOps a => a -> a -> a -> a -- | A Convertible class that will cast or convert between two -- different Posit es types class Convertible a b convert :: Convertible a b => a -> b -- | A Alternative to the typical Show class to assist in displaying -- the Posit es type in different formats class AltShow a -- | Display the Posit in its Binary Representation displayBinary :: AltShow a => a -> String -- | Display the Posit in its Integral Representation displayIntegral :: AltShow a => a -> String -- | Display the Posit as a Rational displayRational :: AltShow a => a -> String -- | Display the Posit as a Decimal until the Repetend occurs displayDecimal :: AltShow a => a -> String class AltFloating p phi :: AltFloating p => p gamma :: AltFloating p => p -> p sinc :: AltFloating p => p -> p expm1 :: AltFloating p => p -> p viaIntegral :: PositC es => (IntN es -> IntN es) -> Posit es -> Posit es viaRational :: PositC es => (Rational -> Rational) -> Posit es -> Posit es viaRational2 :: PositC es => (Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es viaRational3 :: PositC es => (Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es viaRational4 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es viaRational6 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es viaRational8 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es instance Posit.AltFloating Posit.Posit8 instance Posit.AltFloating Posit.Posit16 instance Posit.AltFloating Posit.Posit32 instance Posit.AltFloating Posit.Posit64 instance Posit.AltFloating Posit.Posit128 instance Posit.AltFloating Posit.Posit256 instance Posit.Internal.PositC.PositC es => Posit.AltShow (Posit.Posit es) instance (Posit.Internal.PositC.PositC es1, Posit.Internal.PositC.PositC es2) => Posit.Convertible (Posit.Posit es1) (Posit.Posit es2) instance GHC.Float.Floating Posit.Posit8 instance GHC.Float.Floating Posit.Posit16 instance GHC.Float.Floating Posit.Posit32 instance GHC.Float.Floating Posit.Posit64 instance GHC.Float.Floating Posit.Posit128 instance Posit.FusedOps GHC.Real.Rational instance Posit.Internal.PositC.PositC es => Posit.FusedOps (Posit.Posit es) instance GHC.Float.Floating Posit.Posit256 instance Posit.Internal.PositC.PositC es => GHC.Show.Show (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Classes.Eq (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Classes.Ord (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Num.Num (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Enum.Enum (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Real.Fractional (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Real.Real (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Enum.Bounded (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Read.Read (Posit.Posit es) instance Posit.Internal.PositC.PositC es => Foreign.Storable.Storable (Posit.Posit es) instance Posit.Internal.PositC.PositC es => GHC.Real.RealFrac (Posit.Posit es) instance (GHC.Float.Floating (Posit.Posit es), Posit.Internal.PositC.PositC es) => GHC.Float.RealFloat (Posit.Posit es)