# 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.1.0 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