chain-partners/elm-bignum/1.0.0

NOTE: the latest version is 1.0.1

Integer

This library provides arbitrary precision Integer type and basic arithmetic operations on it.

Definition

type Integer
= Integer Sign Magnitude
| Zero

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.

Constructors

Integer can be constructed from Int or String. Several convenience constructors for commonly used numbers are also provided.

fromInt : 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

Convenience constructor for 0, equivalent to fromInt 0

Convenience constructor for 1, equivalent to fromInt 1

Convenience constructor for 10, equivalent to fromInt 10

Convenience constructor for one hundred, equivalent to fromInt 100

Convenience constructor for one thousand, equivalent to fromInt 1000

Convenience constructor for one million, equivalent to fromInt 1000000

Convenience constructor for one billion, equivalent to fromInt 1000000000

Convenience constructor for one trillion, equivalent to fromInt 1000000000000

Basic Arithmetic

Add two Integers.

add ten million == Integer Positive [1000010] : Integer

Subtract two Integers.

sub million trillion == Integer Negative [9000000,99999] : Integer

Multiply two Integers.

mul (fromInt -873812381) (fromInt 78738732) == Integer Negative [5840892,287888,688] : Integer
divmod : Integer -> Integer -> Maybe ( Integer, Integer )

Divide two Integers 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 Integers 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

Divide two Integers 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

String Representation

toString : Integer -> String

Represent Integer as String.

mul (fromInt 8172387) (fromInt -332)
    |> toString == "-2713232484" : String

Sign Modification

Negate the sign of Integer.

negate (fromInt -332)  == Integer Positive [332] : Integer
negate (fromInt 8872)  == Integer Negative [8872] : Integer
negate zero            == Zero : Integer

Get absolute value of Integer.

negate (fromInt -332)  == Integer Positive [332] : Integer
negate (fromInt 8872)  == Integer Positive [8872] : Integer
negate zero            == Zero : Integer

Comparison

compare : Integer -> Integer -> Order

Compare two Integers.

compare one zero == GT


compare one one == EQ


compare (negate million) one == LT
lt : Integer -> Integer -> Bool
gt : Integer -> Integer -> Bool
lte : Integer -> Integer -> Bool
gte : Integer -> Integer -> Bool
eq : Integer -> Integer -> Bool

Other Functions

Count the number of decimal digits.

mul (fromInt 8172387) (fromInt -332) |> countDigits == 10 : Int