Next: Parameter Conventions, Previous: Function Classes, Up: GMP Basics [Index]
GMP functions generally have output arguments before input arguments. This notation is by analogy with the assignment operator.
GMP lets you use the same variable for both input and output in one call. For
example, the main function for integer multiplication, mpz_mul
, can be
used to square x
and put the result back in x
with
mpz_mul (x, x, x);
Before you can assign to a GMP variable, you need to initialize it by calling one of the special initialization functions. When you’re done with a variable, you need to clear it out, using one of the functions for that purpose. Which function to use depends on the type of variable. See the chapters on integer functions, rational number functions, and floating-point functions for details.
A variable should only be initialized once, or at least cleared between each initialization. After a variable has been initialized, it may be assigned to any number of times.
For efficiency reasons, avoid excessive initializing and clearing. In general, initialize near the start of a function and clear near the end. For example,
void foo (void) { mpz_t n; int i; mpz_init (n); for (i = 1; i < 100; i++) { mpz_mul (n, …); mpz_fdiv_q (n, …); … } mpz_clear (n); }
GMP types like mpz_t
are implemented as one-element arrays of certain
structures. Declaring a variable creates an object with the fields GMP needs,
but variables are normally manipulated by using the pointer to the object. For
both behavior and efficiency reasons, it is discouraged to make copies of the
GMP object itself (either directly or via aggregate objects containing such GMP
objects). If copies are done, all of them must be used read-only; using a copy
as the output of some function will invalidate all the other copies. Note that
the actual fields in each mpz_t
etc are for internal use only and should
not be accessed directly by code that expects to be compatible with future GMP
releases.
Next: Parameter Conventions, Previous: Function Classes, Up: GMP Basics [Index]