This library provides arbitrary precision Integer
type and basic arithmetic operations on it.
An Integer
is an arbitrary-precision number where its 'digits' of base 10 ^ 7 are represented as a linked list in little endian order. This base is chosen to simplify multiplication, toString, and debugging in Elm debugger.
Integer
can be constructed from Int
or String
. Several convenience constructors for commonly used numbers are also provided.
fromInt : Basics.Int -> Integer
Construct Integer
from Int
.
fromInt 83748314374831 -- Integer Positive [4374831,8374831] : Integer
fromInt 0 -- Zero : Integer
fromInt -93939193 -- Integer Negative [3939193,9] : Integer
Entering numbers that cannot be represented by Javascript number type will result in incorrect representation. Use fromString in that case.
fromInt 81927398127398127389172893712893712893798123 |> toString -- "-10497034289617408" : String
fromString "81927398127398127389172893712893712893798123" |> Maybe.map toString -- Just "81927398127398127389172893712893712893798123" : Maybe String
fromString : String -> Maybe Integer
Construct Integer
from String
.
fromString "71289371892739812798734895701347589273948523984573" -- Just (Integer Positive [3984573,7394852,3475892,4895701,1279873,8927398,1289371,7]) : Maybe Integer
fromString "jiaosdjf" -- Nothing : Maybe Integer
zero : Integer
Convenience constructor for 0, equivalent to fromInt 0
one : Integer
Convenience constructor for 1, equivalent to fromInt 1
ten : Integer
Convenience constructor for 10, equivalent to fromInt 10
hundred : Integer
Convenience constructor for one hundred, equivalent to fromInt 100
thousand : Integer
Convenience constructor for one thousand, equivalent to fromInt 1000
million : Integer
Convenience constructor for one million, equivalent to fromInt 1000000
billion : Integer
Convenience constructor for one billion, equivalent to fromInt 1000000000
trillion : Integer
Convenience constructor for one trillion, equivalent to fromInt 1000000000000
add : Integer -> Integer -> Integer
Add two Integer
s.
add ten million == Integer Positive [1000010] : Integer
sub : Integer -> Integer -> Integer
Subtract two Integer
s.
sub million trillion == Integer Negative [9000000,99999] : Integer
mul : Integer -> Integer -> Integer
Multiply two Integer
s.
mul (fromInt -873812381) (fromInt 78738732) == Integer Negative [5840892,287888,688] : Integer
divmod : Integer -> Integer -> Maybe ( Integer, Integer )
Divide two Integer
s and get both quotient and remainder.
divmod (fromInt -873812381) (fromInt 78738732) == Just (Integer Negative [11],Integer Negative [7686329]) : Maybe ( Integer, Integer )
divmod zero (fromInt 871) == Just Zero : Maybe Integer
divmod (fromInt 871) zero == Nothing : Maybe Integer
div : Integer -> Integer -> Maybe Integer
Divide two Integer
s and get quotient.
div (fromInt -873812381) (fromInt 78738732) == Just (Integer Negative [11]) : Maybe Integer
div zero (fromInt 871) == Just Zero : Maybe Integer
div (fromInt 871) zero == Nothing : Maybe Integer
remainderBy : Integer -> Integer -> Maybe Integer
Divide two Integer
s and get remainder.
remainderBy (fromInt -873812381) (fromInt 78738732) == Just (Integer Negative [7686329]) : Maybe Integer
remainderBy zero (fromInt 871) == Just Zero : Maybe Integer
remainderBy (fromInt 871) zero == Nothing : Maybe Integer
toString : Integer -> String
Represent Integer
as String
.
mul (fromInt 8172387) (fromInt -332)
|> toString == "-2713232484" : String
negate : Integer -> Integer
Negate the sign of Integer
.
negate (fromInt -332) == Integer Positive [332] : Integer
negate (fromInt 8872) == Integer Negative [8872] : Integer
negate zero == Zero : Integer
abs : Integer -> Integer
Get absolute value of Integer
.
negate (fromInt -332) == Integer Positive [332] : Integer
negate (fromInt 8872) == Integer Positive [8872] : Integer
negate zero == Zero : Integer
compare : Integer -> Integer -> Basics.Order
Compare two Integer
s.
compare one zero == GT
compare one one == EQ
compare (negate million) one == LT
lt : Integer -> Integer -> Basics.Bool
gt : Integer -> Integer -> Basics.Bool
lte : Integer -> Integer -> Basics.Bool
gte : Integer -> Integer -> Basics.Bool
eq : Integer -> Integer -> Basics.Bool
countDigits : Integer -> Basics.Int
Count the number of decimal digits.
mul (fromInt 8172387) (fromInt -332) |> countDigits == 10 : Int