# [integer.h] Type: Integer

## contents

#include "standard.h"

## The Type

       [integer] implements the algebraic operations for long integers with a
       maximum number of MAX_LONG digits.
       An integer number is represented by its sign, length and digits:
       N.value = N.Sgn * Sum { N.Dig[i] * (IntBase^i) | i in [0 .. N.Len - 1] }

Integer | Abstract integer type

## Basics

       In the following functions the integer operands won't be consumed and
       the resulting integers have to be released.

    Integer Int_cons(int Sgn, int Len, c_byte Dig[])

constructs an integer from sign 'Sgn', length 'Len' and digits 'Dig'

    void Int_des(Integer x, int *Sgn, int *Len, c_byte **Dig)

destructs an integer into sign 'Sgn', length 'Len' and digits 'Dig'

    Integer Int_copy(Integer a)

copies integer 'a'

    void Int_free(Integer a)

frees integer 'a'

    void Int_show(Integer a)

prints integer 'a' to stdout; for debugging

## Conversion

    c_string Int_itoa(Integer a, int Base)

converts integer 'a' into a string; allocs memory

    c_bool Int_s_ok(c_string s, int Base)

whether string 's' represents an integer; not consuming 's'

    Integer Int_atoi(c_string sn, int Base)

converts string 'sn' into a number; not consuming 'sn'

    Integer Int_Cto(long a)

converts long 'a' into an integer

    c_bool Int_okC(Integer n)

whether integer 'n' can be converted into a long

    long Int_toC(Integer n)

converts integer 'n' into a long

## Comparison

    c_bool Int_is0(Integer x)

x == 0 ?

    int Int_cmp(Integer a, Integer b)

a < b ? -1 : a == b ? 0 : +1

    c_bool Int_eq(Integer a, Integer b)

a == b ?

    c_bool Int_ne(Integer a, Integer b)

a != b ?

    c_bool Int_lt(Integer a, Integer b)

a < b ?

    c_bool Int_le(Integer a, Integer b)

a <= b ?

    c_bool Int_gt(Integer a, Integer b)

a > b ?

    c_bool Int_ge(Integer a, Integer b)

a >= b ?

## Arithmetic

    int Int_sgn(Integer a)

signum of integer 'a'

    Integer Int_abs(Integer a)

absolute value |a|

    Integer Int_neg(Integer a)

negation -a

    Integer Int_add(Integer a, Integer b)

addition a + b

    Integer Int_sub(Integer a, Integer b)

substraction a - b

    Integer Int_mlt(Integer a, Integer b)

multiplication a * b

    Integer Int_quo(Integer a, Integer b)

division a / b

    Integer Int_rem(Integer a, Integer b)

remainder a % b

    void Int_quo_rem(Integer a, Integer b, Integer *quo, Integer *rem)

*quo = a/b; *rem = a%b

    Integer Int_gcd(Integer a, Integer b)

greatest common divisor of integer 'a' and 'b'

    Integer Int_exp(Integer b, long n)

exponent b ^ n