# [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