deka-0.4.0.0: Decimal floating point arithmetic

Safe HaskellSafe

Data.Deka

Description

Simple decimal arithmetic.

Deka provides a decimal arithmetic type. You are limited to 34 digits of precision. That's 34 digits total, not 34 digits after the decimal point. For example, the numbers 123.0 and 0.1230 both have four digits of precision. Deka remembers significant digits, so 123 has three digits of precision while 123.0 has four digits of precision.

Using this module, the results are never inexact. Computations will throw exceptions rather than returning an inexact result. That way, you know that any result you have is exactly correct.

Deka represents only finite values. There are no infinities or not-a-number values allowed.

For more control over your arithmetic, see Data.Deka.Quad, but for many routine uses this module is sufficient and is more succinct because, unlike Quad, Deka is a member of the Num typeclass.

Synopsis

Documentation

data Deka Source

Deka wraps a Quad. Only finite Quad may become a Deka; no infinities or NaN values are allowed.

Deka is a member of Num and Real, making it easy to use for elementary arithmetic. Any time you perform arithmetic, the results are always exact. The arithmetic functions will throw exceptions rather than give you an inexact result.

Deka is not a member Fractional because it is generally impossible to perform division without getting inexact results, and Deka never holds inexact results.

Instances

Bounded Deka 
Eq Deka

Eq compares by value. For instance, 3.5 == 3.500.

Num Deka

Many of the Num functions will throw DekaError if their arguments are out of range or if they produce results that are out of range or inexact. For functions that don't throw, you can use integralToDeka rather than fromInteger, or you can use Data.Deka.Quad instead of Deka.

Ord Deka

Ord compares by value. For instance, compare 3.5 3.500 == EQ.

Real Deka 
Show Deka 

newtype DekaT Source

Decimals with a total ordering.

Constructors

DekaT 

Fields

unDekaT :: Deka
 

Instances

Eq DekaT

Eq compares by a total ordering.

Ord DekaT

Ord compares by a total ordering.

Show DekaT 

integralToDeka :: Integral a => a -> Maybe DekaSource

Convert any integral to a Deka. Returns Nothing if the integer is too big to fit into a Deka (34 digits).

strToDeka :: String -> Maybe DekaSource

Convert a string to a Deka. You can use ordinary numeric strings, such as 3.25, or exponential notation, like 325E-2. More infomration on your choices is at:

http://speleotrove.com/decimal/daconvs.html#reftonum

You cannot use strings that represent an NaN or an infinity. If you do that, or use an otherwise invalid string, this function returns Nothing.

quadToDeka :: Quad -> Maybe DekaSource

Change a Quad to a Deka. Only succeeds for finite Quad.

data DekaError Source

Thrown by arithmetic functions in the Num class, as this is the only way to indicate errors.

Constructors

IntegerTooBig Integer

Could not convert an integer to a Deka; it is too big.

Flagged Flags

A computation set flags. This will happen if, for example, you calculate a result that is out of range, such as

>>> maxBound + maxBound :: Deka