exact-pi-0.4.1.3: Exact rational multiples of pi (and integer powers of pi)

LicenseMIT
Maintainerdouglas.mcclean@gmail.com
Stabilityexperimental
Safe HaskellSafe
LanguageHaskell2010
Extensions
  • RankNTypes
  • ExplicitForAll

Data.ExactPi

Description

This type is sufficient to exactly express the closure of Q ∪ {π} under multiplication and division. As a result it is useful for representing conversion factors between physical units. Approximate values are included both to close the remainder of the arithmetic operations in the Num typeclass and to encode conversion factors defined experimentally.

Synopsis

Documentation

data ExactPi Source #

Represents an exact or approximate real value. The exactly representable values are rational multiples of an integer power of pi.

Constructors

Exact Integer Rational

Exact z q = q * pi^z. Note that this means there are many representations of zero.

Approximate (forall a. Floating a => a)

An approximate value. This representation was chosen because it allows conversion to floating types using their native definition of pi.

Instances

Floating ExactPi Source # 
Fractional ExactPi Source # 
Num ExactPi Source # 
Show ExactPi Source # 
Semigroup ExactPi Source #

The multiplicative semigroup over Rationals augmented with multiples of pi.

Monoid ExactPi Source #

The multiplicative monoid over Rationals augmented with multiples of pi.

approximateValue :: Floating a => ExactPi -> a Source #

Approximates an exact or approximate value, converting it to a Floating type. This uses the value of pi supplied by the destination type, to provide the appropriate precision.

isZero :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact or approximate representation of zero.

isExact :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact value.

isExactZero :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact representation of zero.

isExactOne :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact representation of one.

areExactlyEqual :: ExactPi -> ExactPi -> Bool Source #

Identifies whether two ExactPi values are exactly equal.

isExactInteger :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact representation of an integer.

toExactInteger :: ExactPi -> Maybe Integer Source #

Converts an ExactPi to an exact Integer or Nothing.

isExactRational :: ExactPi -> Bool Source #

Identifies whether an ExactPi is an exact representation of a rational.

rationalApproximations :: ExactPi -> [Rational] Source #

Converts an ExactPi to a list of increasingly accurate rational approximations, on alternating sides of the actual value. Note that Approximate values are converted using the Real instance for Double into a singleton list. Note that exact rationals are also converted into a singleton list.

Implementation based on work by Anders Kaseorg shared at http://qr.ae/RbXl8M.