The functions for integer arithmetic assume that all integer objects are
initialized. You do that by calling the function `mpz_init`

. For
example,

{ mpz_t integ; mpz_init (integ); ... mpz_add (integ, ...); ... mpz_sub (integ, ...); /* Unless the program is about to exit, do ... */ mpz_clear (integ); }

As you can see, you can store new values any number of times, once an object is initialized.

— Function: void **mpz_inits** (`mpz_t x, ...`)

Initialize a NULL-terminated list of

`mpz_t`

variables, and set their values to 0.

— Function: void **mpz_init2** (`mpz_t x, mp_bitcnt_t n`)

Initialize

x, with space forn-bit numbers, and set its value to 0. Calling this function instead of`mpz_init`

or`mpz_inits`

is never necessary; reallocation is handled automatically by GMP when needed.While

ndefines the initial space,xwill grow automatically in the normal way, if necessary, for subsequent values stored.`mpz_init2`

makes it possible to avoid such reallocations if a maximum size is known in advance.In preparation for an operation, GMP often allocates one limb more than ultimately needed. To make sure GMP will not perform reallocation for

x, you need to add the number of bits in`mp_limb_t`

ton.

— Function: void **mpz_clear** (`mpz_t x`)

Free the space occupied by

x. Call this function for all`mpz_t`

variables when you are done with them.

— Function: void **mpz_clears** (`mpz_t x, ...`)

Free the space occupied by a NULL-terminated list of

`mpz_t`

variables.

— Function: void **mpz_realloc2** (`mpz_t x, mp_bitcnt_t n`)

Change the space allocated for

xtonbits. The value inxis preserved if it fits, or is set to 0 if not.Calling this function is never necessary; reallocation is handled automatically by GMP when needed. But this function can be used to increase the space for a variable in order to avoid repeated automatic reallocations, or to decrease it to give memory back to the heap.