ieee754-0.7.6: Utilities for dealing with IEEE floating point numbers

CopyrightCopyright (c) 2010, Patrick Perry <patperry@gmail.com>
LicenseBSD3
MaintainerPatrick Perry <patperry@gmail.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

Data.AEq

Description

A type class for approximate and exact equalilty comparisons and instances for common data types.

Synopsis

Documentation

class Eq a => AEq a where

Types with approximate and exact equality comparisons.

Minimal complete definition

Nothing

Methods

(===) :: a -> a -> Bool infix 4

An exact equality comparison.

For real IEEE types, two values are equivalent in the following cases:

  • both values are +0;
  • both values are -0;
  • both values are nonzero and equal to each other (according to ==);
  • both values are NaN with the same payload and sign.

For complex IEEE types, two values are equivalent if their real and imaginary parts are equivalent.

(~==) :: a -> a -> Bool infix 4

An approximate equality comparison operator.

For real IEEE types, two values are approximately equal in the following cases:

  • at least half of their significand bits agree;
  • both values are less than epsilon;
  • both values are NaN.

For complex IEEE types, two values are approximately equal in the followiing cases:

  • their magnitudes are approximately equal and the angle between them is less than 32*epsilon;
  • both magnitudes are less than epsilon;
  • both have a NaN real or imaginary part.

Admitedly, the 32 is a bit of a hack. Future versions of the library may switch to a more principled test of the angle.

Instances

AEq Bool 
AEq Char 
AEq Double 
AEq Float 
AEq Int 
AEq Int8 
AEq Int16 
AEq Int32 
AEq Int64 
AEq Integer 
AEq Ordering 
AEq Word 
AEq Word8 
AEq Word16 
AEq Word32 
AEq Word64 
AEq () 
AEq WordPtr 
AEq IntPtr 
AEq CChar 
AEq CSChar 
AEq CUChar 
AEq CShort 
AEq CUShort 
AEq CInt 
AEq CUInt 
AEq CLong 
AEq CULong 
AEq CLLong 
AEq CULLong 
AEq CFloat 
AEq CDouble 
AEq CPtrdiff 
AEq CSize 
AEq CWchar 
AEq CSigAtomic 
AEq CClock 
AEq CTime 
AEq CIntPtr 
AEq CUIntPtr 
AEq CIntMax 
AEq CUIntMax 
AEq a => AEq [a] 
AEq (StablePtr a) 
AEq (Ptr a) 
AEq (FunPtr a) 
AEq (Complex Double) 
AEq (Complex Float) 
AEq (Complex CFloat) 
AEq (Complex CDouble) 
AEq (ForeignPtr a) 
AEq a => AEq (Maybe a) 
(AEq a, AEq b) => AEq (Either a b) 
(AEq a, AEq b) => AEq (a, b) 
(AEq a, AEq b, AEq c) => AEq (a, b, c) 
(AEq a, AEq b, AEq c, AEq d) => AEq (a, b, c, d) 
(AEq a, AEq b, AEq c, AEq d, AEq e) => AEq (a, b, c, d, e) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f) => AEq (a, b, c, d, e, f) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g) => AEq (a, b, c, d, e, f, g) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h) => AEq (a, b, c, d, e, f, g, h) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i) => AEq (a, b, c, d, e, f, g, h, i) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j) => AEq (a, b, c, d, e, f, g, h, i, j) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k) => AEq (a, b, c, d, e, f, g, h, i, j, k) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l) => AEq (a, b, c, d, e, f, g, h, i, j, k, l) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m, AEq n) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m, n) 
(AEq a, AEq b, AEq c, AEq d, AEq e, AEq f, AEq g, AEq h, AEq i, AEq j, AEq k, AEq l, AEq m, AEq n, AEq o) => AEq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)