Module DA.BigNumeric

This module exposes operations for working with the BigNumeric type.

Functions

scale

: BigNumeric -> Int

Calculate the scale of a BigNumeric number. The BigNumeric number is represented as n * 10^-s where n is an integer with no trailing zeros, and s is the scale.

Thus, the scale represents the number of nonzero digits after the decimal point. Note that the scale can be negative if the BigNumeric represents an integer with trailing zeros. In that case, it represents the number of trailing zeros (negated).

The scale ranges between 2^15 and -2^15 + 1. The scale of 0 is 0 by convention.

>>> scale 1.1
1
>>> scale (shiftLeft (2^14) 1.0)
-2^14
precision

: BigNumeric -> Int

Calculate the precision of a BigNumeric number. The BigNumeric number is represented as n * 10^-s where n is an integer with no trailing zeros, and s is the scale. The precision is the number of digits in n.

Thus, the precision represents the number of significant digits in the BigNumeric.

The precision ranges between 0 and 2^16 - 1.

>>> precision 1.10
2
div

: Int -> RoundingMode -> BigNumeric -> BigNumeric -> BigNumeric

Calculate a division of BigNumeric numbers. The value of div n r a b is the division of a by b, rounded to n decimal places (i.e. scale), according to the rounding mode r.

This will fail when dividing by 0, and when using the RoundingUnnecessary mode for a number that cannot be represented exactly with at most n decimal places.

round

: Int -> RoundingMode -> BigNumeric -> BigNumeric

Round a BigNumeric number. The value of round n r a is the value of a rounded to n decimal places (i.e. scale), according to the rounding mode r.

This will fail when using the RoundingUnnecessary mode for a number that cannot be represented exactly with at most n decimal places.

shiftRight

: Int -> BigNumeric -> BigNumeric

Shift a BigNumeric number to the right by a power of 10. The value shiftRight n a is the value of a times 10^(-n).

This will fail if the resulting BigNumeric is out of bounds.

>>> shiftRight 2 32.0
0.32
shiftLeft

: Int -> BigNumeric -> BigNumeric

Shift a BigNumeric number to the left by a power of 10. The value shiftLeft n a is the value of a times 10^n.

This will fail if the resulting BigNumeric is out of bounds.

>>> shiftLeft 2 32.0
3200.0
roundToNumeric

: NumericScale n => RoundingMode -> BigNumeric -> Numeric n

Round a BigNumeric and cast it to a Numeric. This function uses the scale of the resulting numeric to determine the scale of the rounding.

This will fail when using the RoundingUnnecessary mode if the BigNumeric cannot be represented exactly in the requested Numeric n.

>>> (roundToNumeric RoundingHalfUp 1.23456789 : Numeric 5)
1.23457