posit-2022.2.0.0: Posit Numbers
Safe HaskellSafe-Inferred
LanguageHaskell2010

Posit

Description

Library implementing standard Posit Numbers both Posit Standard version 3.2 and 2022, with some improvements. Posit is the interface, PositC provides the implemetation. 2's Complement Fixed Point Integers, and Rational numbers, are used throughout, as well as Integers & Naturals. Encode and Decode are indexed through a Type Family.

Synopsis

Documentation

data Posit (es :: ES) Source #

Base GADT rapper type, that uses the Exponent Size kind to index the various implementations

Instances

Instances details
PositC es => Storable (Posit es) Source # 
Instance details

Defined in Posit

Methods

sizeOf :: Posit es -> Int #

alignment :: Posit es -> Int #

peekElemOff :: Ptr (Posit es) -> Int -> IO (Posit es) #

pokeElemOff :: Ptr (Posit es) -> Int -> Posit es -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Posit es) #

pokeByteOff :: Ptr b -> Int -> Posit es -> IO () #

peek :: Ptr (Posit es) -> IO (Posit es) #

poke :: Ptr (Posit es) -> Posit es -> IO () #

PositC es => Bounded (Posit es) Source # 
Instance details

Defined in Posit

Methods

minBound :: Posit es #

maxBound :: Posit es #

PositC es => Enum (Posit es) Source # 
Instance details

Defined in Posit

Methods

succ :: Posit es -> Posit es #

pred :: Posit es -> Posit es #

toEnum :: Int -> Posit es #

fromEnum :: Posit es -> Int #

enumFrom :: Posit es -> [Posit es] #

enumFromThen :: Posit es -> Posit es -> [Posit es] #

enumFromTo :: Posit es -> Posit es -> [Posit es] #

enumFromThenTo :: Posit es -> Posit es -> Posit es -> [Posit es] #

PositF es => Floating (Posit es) Source # 
Instance details

Defined in Posit

Methods

pi :: Posit es #

exp :: Posit es -> Posit es #

log :: Posit es -> Posit es #

sqrt :: Posit es -> Posit es #

(**) :: Posit es -> Posit es -> Posit es #

logBase :: Posit es -> Posit es -> Posit es #

sin :: Posit es -> Posit es #

cos :: Posit es -> Posit es #

tan :: Posit es -> Posit es #

asin :: Posit es -> Posit es #

acos :: Posit es -> Posit es #

atan :: Posit es -> Posit es #

sinh :: Posit es -> Posit es #

cosh :: Posit es -> Posit es #

tanh :: Posit es -> Posit es #

asinh :: Posit es -> Posit es #

acosh :: Posit es -> Posit es #

atanh :: Posit es -> Posit es #

log1p :: Posit es -> Posit es #

expm1 :: Posit es -> Posit es #

log1pexp :: Posit es -> Posit es #

log1mexp :: Posit es -> Posit es #

(Floating (Posit es), PositC es) => RealFloat (Posit es) Source # 
Instance details

Defined in Posit

Methods

floatRadix :: Posit es -> Integer #

floatDigits :: Posit es -> Int #

floatRange :: Posit es -> (Int, Int) #

decodeFloat :: Posit es -> (Integer, Int) #

encodeFloat :: Integer -> Int -> Posit es #

exponent :: Posit es -> Int #

significand :: Posit es -> Posit es #

scaleFloat :: Int -> Posit es -> Posit es #

isNaN :: Posit es -> Bool #

isInfinite :: Posit es -> Bool #

isDenormalized :: Posit es -> Bool #

isNegativeZero :: Posit es -> Bool #

isIEEE :: Posit es -> Bool #

atan2 :: Posit es -> Posit es -> Posit es #

PositC es => Num (Posit es) Source # 
Instance details

Defined in Posit

Methods

(+) :: Posit es -> Posit es -> Posit es #

(-) :: Posit es -> Posit es -> Posit es #

(*) :: Posit es -> Posit es -> Posit es #

negate :: Posit es -> Posit es #

abs :: Posit es -> Posit es #

signum :: Posit es -> Posit es #

fromInteger :: Integer -> Posit es #

PositC es => Read (Posit es) Source # 
Instance details

Defined in Posit

PositC es => Fractional (Posit es) Source # 
Instance details

Defined in Posit

Methods

(/) :: Posit es -> Posit es -> Posit es #

recip :: Posit es -> Posit es #

fromRational :: Rational -> Posit es #

PositC es => Real (Posit es) Source # 
Instance details

Defined in Posit

Methods

toRational :: Posit es -> Rational #

PositC es => RealFrac (Posit es) Source # 
Instance details

Defined in Posit

Methods

properFraction :: Integral b => Posit es -> (b, Posit es) #

truncate :: Integral b => Posit es -> b #

round :: Integral b => Posit es -> b #

ceiling :: Integral b => Posit es -> b #

floor :: Integral b => Posit es -> b #

PositC es => Show (Posit es) Source # 
Instance details

Defined in Posit

Methods

showsPrec :: Int -> Posit es -> ShowS #

show :: Posit es -> String #

showList :: [Posit es] -> ShowS #

NFData (Posit es) Source #

NFData Instance

Instance details

Defined in Posit

Methods

rnf :: Posit es -> () #

PositC es => Eq (Posit es) Source # 
Instance details

Defined in Posit

Methods

(==) :: Posit es -> Posit es -> Bool #

(/=) :: Posit es -> Posit es -> Bool #

PositC es => Ord (Posit es) Source # 
Instance details

Defined in Posit

Methods

compare :: Posit es -> Posit es -> Ordering #

(<) :: Posit es -> Posit es -> Bool #

(<=) :: Posit es -> Posit es -> Bool #

(>) :: Posit es -> Posit es -> Bool #

(>=) :: Posit es -> Posit es -> Bool #

max :: Posit es -> Posit es -> Posit es #

min :: Posit es -> Posit es -> Posit es #

PositF es => AltFloating (Posit es) Source # 
Instance details

Defined in Posit

Methods

machEps :: Posit es Source #

approxEq :: Posit es -> Posit es -> Bool Source #

goldenRatio :: Posit es Source #

hypot2 :: Posit es -> Posit es -> Posit es Source #

hypot3 :: Posit es -> Posit es -> Posit es -> Posit es Source #

hypot4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

PositC es => AltShow (Posit es) Source # 
Instance details

Defined in Posit

PositC es => FusedOps (Posit es) Source # 
Instance details

Defined in Posit

Methods

fma :: Posit es -> Posit es -> Posit es -> Posit es Source #

fam :: Posit es -> Posit es -> Posit es -> Posit es Source #

fmms :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fsum3 :: Posit es -> Posit es -> Posit es -> Posit es Source #

fsum4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fsumL :: Foldable t => t (Posit es) -> Posit es Source #

fdot3 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fdot4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fdotL :: Foldable t => t (Posit es) -> t (Posit es) -> Posit es Source #

fsm :: Posit es -> Posit es -> Posit es -> Posit es Source #

PositC es => Random (Posit es) Source #

Random instance for the Posit Sampling of R [0,1), this is for the real numbers, not on the projective real numbers, for projective real numbers, use Uniform.

Instance details

Defined in Posit

Methods

randomR :: RandomGen g => (Posit es, Posit es) -> g -> (Posit es, g) #

random :: RandomGen g => g -> (Posit es, g) #

randomRs :: RandomGen g => (Posit es, Posit es) -> g -> [Posit es] #

randoms :: RandomGen g => g -> [Posit es] #

PositC es => Uniform (Posit es) Source #

Uniform instance for the Posit Sampling of the projective real line

Instance details

Defined in Posit

Methods

uniformM :: StatefulGen g m => g -> m (Posit es) #

(PositC es1, PositC es2) => Convertible (Posit es1) (Posit es2) Source # 
Instance details

Defined in Posit

Methods

convert :: Posit es1 -> Posit es2 Source #

Main Exported Types

A Posit-3.2 8-bit Posit number with exponentSize = '0', and 1 byte wide

A Posit-3.2 16-bit Posit number with exponentSize = '1', and 2 bytes wide

A Posit-3.2 32-bit Posit number with exponentSize = '2', and 4 bytes wide

A Posit-3.2 64-bit Posit number with exponentSize = '3', and 8 bytes wide

A Posit-3.2 128-bit Posit number with exponentSize = '4', and 16 bytes wide

A Posit-3.2 256-bit Posit number with exponentSize = '5', and 32 bytes wide

A Posit-2022 8-bit Posit number with exponentSize = '2', and 1 byte wide

A Posit-2022 16-bit Posit number with exponentSize = '2', and 2 bytes wide

A Posit-2022 32-bit Posit number with exponentSize = '2', and 4 bytes wide

A Posit-2022 64-bit Posit number with exponentSize = '2', and 8 bytes wide

A Posit-2022 128-bit Posit number with exponentSize = '2', and 16 bytes wide

A Posit-2022 256-bit Posit number with exponentSize = '2', and 32 bytes wide

A Complete Pair of Patterns for Matching Exported Types

pattern NaR :: forall es. PositC es => Posit es Source #

Not a Real Number, the Posit is like a Maybe type, it's either a real number or not

A pattern for Exception handling when a value is Not a Real number (NaR).

pattern R :: forall es. PositC es => Rational -> Posit es Source #

A Real or at least Rational Number, rounded to the nearest Posit Rational representation

A pattern for the non-Exceptional case, yielding a Rational, will make a total function when paired with NaR, if the Rational implementation is total.

Fused Operation Interface defined by the Posit Standard

class Num a => FusedOps a where Source #

A class that delays the rounding operation until the end for some operations

Methods

fma :: a -> a -> a -> a Source #

Fused Multiply Add: (a * b) + c

fam :: a -> a -> a -> a Source #

Fused Add Multiply: (a + b) * c

fmms :: a -> a -> a -> a -> a Source #

Fused Multiply Multiply Subtract: (a * b) - (c * d)

fsum3 :: a -> a -> a -> a Source #

Fused Sum of 3 values: a + b + c

fsum4 :: a -> a -> a -> a -> a Source #

Fused Sum of 4 values: a + b + c + d

fsumL :: Foldable t => t a -> a Source #

Fused Sum of a List of Posits

fdot3 :: a -> a -> a -> a -> a -> a -> a Source #

Fused Dot Product of 3 element vector: (a1 * b1) + (a2 * b2) + (a3 * b3)

fdot4 :: a -> a -> a -> a -> a -> a -> a -> a -> a Source #

Fused Dot Product of 4 element vector: (a0 * b0) + (a1 * b1) + (a2 * b2) + (a3 * b3)

fdotL :: Foldable t => t a -> t a -> a Source #

Fused Dot Product of Two Lists

fsm :: a -> a -> a -> a Source #

Fused Subtract Multiply: a - (b * c)

Instances

Instances details
FusedOps Rational Source # 
Instance details

Defined in Posit

PositC es => FusedOps (Posit es) Source # 
Instance details

Defined in Posit

Methods

fma :: Posit es -> Posit es -> Posit es -> Posit es Source #

fam :: Posit es -> Posit es -> Posit es -> Posit es Source #

fmms :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fsum3 :: Posit es -> Posit es -> Posit es -> Posit es Source #

fsum4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fsumL :: Foldable t => t (Posit es) -> Posit es Source #

fdot3 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fdot4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

fdotL :: Foldable t => t (Posit es) -> t (Posit es) -> Posit es Source #

fsm :: Posit es -> Posit es -> Posit es -> Posit es Source #

Posits are Convertable between different Posit representations

class Convertible a b where Source #

A Convertible class that will cast or convert between two different Posit es types

Methods

convert :: a -> b Source #

Instances

Instances details
(PositC es1, PositC es2) => Convertible (Posit es1) (Posit es2) Source # 
Instance details

Defined in Posit

Methods

convert :: Posit es1 -> Posit es2 Source #

Additional functions to show the Posit in different formats

class AltShow a where Source #

A Alternative to the typical Show class to assist in displaying the Posit es type in different formats

Methods

displayBinary :: a -> String Source #

Display the Posit in its Binary Representation

displayIntegral :: a -> String Source #

Display the Posit in its Integral Representation

displayRational :: a -> String Source #

Display the Posit as a Rational

displayDecimal :: a -> String Source #

Display the Posit as a Decimal until the Repetend occurs

Instances

Instances details
PositC es => AltShow (Posit es) Source # 
Instance details

Defined in Posit

Additional Special Functions

class AltFloating p where Source #

Methods

machEps :: p Source #

approxEq :: p -> p -> Bool Source #

goldenRatio :: p Source #

hypot2 :: p -> p -> p Source #

hypot3 :: p -> p -> p -> p Source #

hypot4 :: p -> p -> p -> p -> p Source #

Instances

Instances details
PositF es => AltFloating (Posit es) Source # 
Instance details

Defined in Posit

Methods

machEps :: Posit es Source #

approxEq :: Posit es -> Posit es -> Bool Source #

goldenRatio :: Posit es Source #

hypot2 :: Posit es -> Posit es -> Posit es Source #

hypot3 :: Posit es -> Posit es -> Posit es -> Posit es Source #

hypot4 :: Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

Functions to lift functions of Integers or Rationals to operate on Posit Types

viaIntegral :: PositC es => (IntN es -> IntN es) -> Posit es -> Posit es Source #

viaRational2 :: PositC es => (Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es Source #

viaRational3 :: PositC es => (Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es Source #

viaRational4 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

viaRational6 :: PositC es => (Rational -> Rational -> Rational -> Rational -> Rational -> Rational -> Rational) -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es -> Posit es Source #

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 Source #