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.
void
mpz_init (mpz_t x)
¶Initialize x, and set its value to 0.
void
mpz_inits (mpz_t x, ...)
¶Initialize a NULL-terminated list of mpz_t
variables, and set their
values to 0.
void
mpz_init2 (mpz_t x, mp_bitcnt_t n)
¶Initialize x, with space for n-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 n defines the initial space, x will 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
to n.
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.
void
mpz_clears (mpz_t x, ...)
¶Free the space occupied by a NULL-terminated list of mpz_t
variables.
void
mpz_realloc2 (mpz_t x, mp_bitcnt_t n)
¶Change the space allocated for x to n bits. The value in x is 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.