The libraries in this subsection are as follows:
base (module Data.Fixed): Standard fixed-precision arithmetic from the base. Precision decided at compile-time.
Decimal (module Data.Decimal): Fixed-precision
Decimal
type and some additional utility functions. Precision decided in runtime.numbers (modules Data.Number.*): Constructive real numbers, multi-precision floats, fixed-precision decimals, and more. Precision decided at compile-time.
The Fixed datatype from base
is good for fixed-precision arithmetic when you know the precision at compile-time. The precision is encoded as a phantom type, so it's not convenient to handle multiple precisions.
The Decimal
library defines a more expressive DecimalRaw
type and usually used Decimal
synonym:
type Decimal = DecimalRaw Integer data DecimalRaw I = Decimal{ decimalPlaces :: !Word8, decimalMantissa :: !i }
The exponent is expressed as a Word8
, giving at most 255 decimal places. The Decimal
library automatically handles multiple...