dimensional-1.4: Statically checked physical dimensions
CopyrightCopyright (C) 2006-2018 Bjorn Buckwalter
LicenseBSD3
Maintainerbjorn@buckwalter.se
StabilityStable
Safe HaskellNone
LanguageHaskell2010

Numeric.Units.Dimensional.Float

Description

Defines convenience functions for inspecting and manipulating quantities with RealFloat floating-point representations.

The dimensionally-typed versions of functions from Patrick Perry's ieee754 package copy that package's API as closely as possible, by permission. In turn they are based on the tango math library for the D language.

Synopsis

Lifted Predicates from RealFloat

isDenormalized :: RealFloat a => Quantity d a -> Bool Source #

True if the representation of the argument is too small to be represented in normalized format.

isInfinite :: RealFloat a => Quantity d a -> Bool Source #

True if the representation of the argument is an IEEE infinity or negative infinity.

>>> isInfinite (_1 / _0)
True
>>> isInfinite (42 *~ micro farad)
False

isNaN :: RealFloat a => Quantity d a -> Bool Source #

True if the representation of the argument is an IEEE "not-a-number" (NaN) value.

>>> isNaN _3
False
>>> isNaN (_1 / _0)
False
>>> isNaN (asin _4)
True

isNegativeZero :: RealFloat a => Quantity d a -> Bool Source #

True if the representation of the argument is an IEEE negative zero.

>>> isNegativeZero _0
False
>>> isNegativeZero $ (-1e-200 *~ one) * (1e-200 *~ one)
True

Convenience Functions

isFiniteNumber :: RealFloat a => Quantity d a -> Bool Source #

True if the representation of the argument is a number and is not infinite.

>>> isFiniteNumber (_1 / _0)
False
>>> isFiniteNumber (_0 / _0)
False
>>> isFiniteNumber (_3 / _2)
True

scaleFloat :: RealFloat a => Int -> Quantity d a -> Quantity d a Source #

Multiplies a floating-point quantity by an integer power of the radix of the representation type.

Use floatRadix to determine the radix.

>>> let x = 3 *~ meter
>>> scaleFloat 3 x
24.0 m

Lifted Functions from Numeric.IEEE

Values

infinity :: IEEE a => Quantity d a Source #

An infinite floating-point quantity.

minNormal :: IEEE a => Quantity d a Source #

The smallest representable positive quantity whose representation is normalized.

maxFinite :: IEEE a => Quantity d a Source #

The largest representable finite floating-point quantity.

epsilon :: IEEE a => Dimensionless a Source #

The smallest positive value x such that _1 + x is representable.

nan :: IEEE a => Quantity d a Source #

Default NaN quantity.

Arithmetic

predIEEE :: IEEE a => Quantity d a -> Quantity d a Source #

Return the next smallest representable floating-point quantity (Infinity and NaN are unchanged).

succIEEE :: IEEE a => Quantity d a -> Quantity d a Source #

Return the next largest representable floating-point quantity (Infinity and NaN are unchanged).

bisectIEEE :: IEEE a => Quantity d a -> Quantity d a -> Quantity d a Source #

Given two floating-point quantities with the same sign, return the quantity whose representation is halfway between their representations on the IEEE number line. If the signs of the values differ or either is NaN, the value is undefined.

copySign :: IEEE a => Quantity d a -> Quantity d a -> Quantity d a Source #

copySign x y returns the quantity x with its sign changed to match that of y.

NaN with Payload

nanWithPayload :: IEEE a => Word64 -> Quantity d a Source #

Quiet NaN quantity with a positive integer payload. Payload must be less than maxNaNPayload of the representation type.

Beware that while some platforms allow using 0 as a payload, this behavior is not portable.

nanPayload :: IEEE a => Quantity d a -> Word64 Source #

The payload stored in a NaN quantity. Undefined if the argument is not NaN.

maxNaNPayload :: IEEE a => a -> Word64 #

Maximum NaN payload for type a.

Comparisons

identicalIEEE :: IEEE a => Quantity d a -> Quantity d a -> Bool Source #

Return True if two floating-point quantities are exactly (bitwise) equal.

minNum :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a Source #

Return the minimum of two quantities; if one value is NaN, return the other. Prefer the first if both values are NaN.

maxNum :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a Source #

Return the maximum of two quantities; if one value is NaN, return the other. Prefer the first if both values are NaN.

minNaN :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a Source #

Return the minimum of two quantities; if one value is NaN, return it. Prefer the first if both values are NaN.

maxNaN :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a Source #

Return the maximum of two quantities; if one value is NaN, return it. Prefer the first if both values are NaN.