Module

# Data.Number.Approximate

Package
purescript-numbers
Repository
purescript/purescript-numbers

This module defines functions for comparing numbers.

### #FractionSource

``newtype Fraction``

A newtype for (small) numbers, typically in the range [0:1]. It is used as an argument for `eqRelative`.

#### Constructors

• `Fraction Number`

### #eqRelativeSource

``eqRelative :: Fraction -> Number -> Number -> Boolean``

Compare two `Number`s and return `true` if they are equal up to the given relative error (`Fraction` parameter).

This comparison is scale-invariant, i.e. if `eqRelative frac x y`, then `eqRelative frac (s * x) (s * y)` for a given scale factor `s > 0.0` (unless one of x, y is exactly `0.0`).

Note that the relation that `eqRelative frac` induces on `Number` is not an equivalence relation. It is reflexive and symmetric, but not transitive.

Example:

``````> (eqRelative (Fraction 0.01)) 133.7 133.0
true

> (eqRelative (Fraction 0.001)) 133.7 133.0
false

> (eqRelative (Fraction 0.01)) (0.1 + 0.2) 0.3
true
``````

### #eqApproximateSource

``eqApproximate :: Number -> Number -> Boolean``

Test if two numbers are approximately equal, up to a relative difference of one part in a million:

``````eqApproximate = eqRelative (Fraction 1.0e-6)
``````

Example

``````> 0.1 + 0.2 == 0.3
false

> 0.1 + 0.2 ≅ 0.3
true
``````

### #(~=)Source

Operator alias for Data.Number.Approximate.eqApproximate (non-associative / precedence 4)

### #(≅)Source

Operator alias for Data.Number.Approximate.eqApproximate (non-associative / precedence 4)

### #neqApproximateSource

``neqApproximate :: Number -> Number -> Boolean``

The complement of `eqApproximate`.

### #(≇)Source

Operator alias for Data.Number.Approximate.neqApproximate (non-associative / precedence 4)

### #ToleranceSource

``newtype Tolerance``

A newtype for (small) numbers. It is used as an argument for `eqAbsolute`.

#### Constructors

• `Tolerance Number`

### #eqAbsoluteSource

``eqAbsolute :: Tolerance -> Number -> Number -> Boolean``

Compare two `Number`s and return `true` if they are equal up to the given (absolute) tolerance value. Note that this type of comparison is not scale-invariant. The relation induced by `(eqAbsolute (Tolerance eps))` is symmetric and reflexive, but not transitive.

Example:

``````> (eqAbsolute (Tolerance 1.0)) 133.7 133.0
true

> (eqAbsolute (Tolerance 0.1)) 133.7 133.0
false
``````