posit

[ bsd3, library, math, numeric ] [ Propose Tags ]

The Posit Number format. Please see the README on GitHub at https://github.com/waivio/posit#readme


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
do-no-storable

Build without Storable Class support

Disabled
do-no-orphans

Build without Orphan Instances if data-dword gets updated for Storable Instances

Disabled
do-liquid

Build with Liquid Haskell checking

Disabled
do-test

Export additional algorithms for calculating primitive functions for test purposes

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 3.2.0.0, 3.2.0.1, 3.2.0.2, 3.2.0.3, 3.2.0.4, 3.2.0.5, 2022.0.0.0, 2022.0.0.1, 2022.0.1.0, 2022.0.1.1, 2022.0.1.2, 2022.0.1.3, 2022.0.1.4, 2022.1.0.0, 2022.2.0.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), data-dword, deepseq (>=1.1 && <2), scientific [details]
License BSD-3-Clause
Copyright 2021-2022 Nathan Waivio
Author Nathan Waivio
Maintainer nathan.waivio@gmail.com
Home page https://github.com/waivio/posit#readme
Bug tracker https://github.com/waivio/posit/issues
Source repo head: git clone https://github.com/waivio/posit
Uploaded by nwaivio at 2022-11-11T21:44:45Z
Distributions
Downloads 458 total (52 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-11-11 [all 1 reports]

Readme for posit-3.2.0.2

[back to package description]

posit 3.2.0.2

The Posit Standard 3.2, where Real numbers are approximated by Maybe Rational. The Posit Numbers are a drop in replacement for Float or Double mapped to a 2's complement integer type; smoothly and with tapering precision, in a similar way to the projective real line. The 'posit' library implements the following standard classes:

  • Show
  • Eq
  • Ord -- compare as an integer representation
  • Num -- Addition, subtraction, multiplication, and other operations
  • Enum -- Successor and Predecessor
  • Fractional -- division, divide by zero is Not a Real (NaR) number
  • Real
  • Bounded
  • FusedOps -- dot product and others
  • Convertable -- Conversions between different posit formats
  • AltShow
  • Read
  • Storable -- Formats for binary data, for computation and data interchange
  • RealFrac
  • RealFloat
  • Floating -- Mathematical functions such as logarithm, exponential, trigonometric, and hyperbolic functions. Warning! May induce trance.

The Posits are indexed by the type (es :: ES) where exponent size and word size are related. In posit-3.2.0.2 es is instantiated as Z, I, II, III, IV, V. The word size (in bits) of the value is = 8 * 2^es, that is 2^es bytes. The Types: 'Posit8', 'Posit16', 'Posit32', 'Posit64', 'Posit128', and 'Posit256' are implemented and include a couple of auxiliary classes, like AltShow, AltFloating, and FusedOps.

class AltShow a where
  -- Display the Posit in its Binary Representation
  displayBinary :: a -> String
  -- Display the Posit in its Integral Representation
  displayIntegral :: a -> String
  -- Display the Posit as a Rational
  displayRational :: a -> String
  -- Display the Posit as a Decimal until the Repented occurs
  displayDecimal :: a -> String
class AltFloating p where
  phi :: p
  gamma :: p -> p
  sinc :: p -> p
  expm1 :: p -> p
class Num a => FusedOps a where
  -- |Fused Multiply Add: (a * b) + c
  fma :: a -> a -> a -> a
  -- |Fused Add Multiply: (a + b) * c
  fam :: a -> a -> a -> a
  -- |Fused Multiply Multiply Subtract: (a * b) - (c * d)
  fmms :: a -> a -> a -> a -> a
  -- |Fused Sum of 3 values: a + b + c
  fsum3 :: a -> a -> a -> a
  -- |Fused Sum of 4 values: a + b + c + d
  fsum4 :: a -> a -> a -> a -> a
  -- |Fused Sum of a List of Posits
  fsumL :: Foldable t => t a -> a
  -- |Fused Dot Product of 3 element vector: (a1 * b1) + (a2 * b2) + (a3 * b3)
  fdot3 :: a -> a -> a -> a -> a -> a -> a
  -- |Fused Dot Product of 4 element veector: (a0 * b0) + (a1 * b1) + (a2 * b2) + (a3 * b3)
  fdot4 :: a -> a -> a -> a -> a -> a -> a -> a -> a
  -- |Fused Dot Product of Two Lists
  fdotL :: Foldable t => t a -> t a -> a
  -- |Fused Subtract Multiply: a - (b * c)
  fsm :: a -> a -> a -> a

The Posit type is 'Convertible' between other Posit lengths.

class Convertible a b where
  convert :: a -> b

The Posit Library is built on top of two of the most excellent libraries: data-dword, and scientific. The 'data-dword' library provides the underlining machine word representation, it can provide 2^es word size, 2's complement fixed length integers. The 'scientific' library provides 'read' and 'show' instances.