Go to the previous, next section.

Initialization

Before you can use a variable or object of type MP_INT or MP_RAT, you must initialize it. This fills in the components that point to dynamically allocated space for the limbs of the number.

When you are finished using the object, you should clear out the object. This frees the dynamic space that it points to, so the space can be used again.

Once you have initialized the object, you need not be concerned about allocating additional space. The functions in the MP package automatically allocate additional space when the object does not already have enough space. They do not, however, reduce the space in use when a smaller number is stored in the object. Most of the time, this policy is best, since it avoids frequent re-allocation. If you want to reduce the space in an object to the minimum needed, you can do _mpz_realloc (&object, mpz_size (&object)).

The functions to initialize numbers are mpz_init (for MP_INT) and mpq_init (for MP_RAT).

mpz_init allocates space for the limbs, and stores a pointer to that space in the MP_INT object. It also stores the value 0 in the object.

In the same manner, mpq_init allocates space for the numerator and denominator limbs, and stores pointers to these spaces in the MP_RAT object.

To clear out a number object, use mpz_clear and mpq_clear, respectively.

Here is an example of use:

{
  MP_INT temp;
  mpz_init (&temp);

  ... store and read values in temp zero or more times ...

  mpz_clear (&temp):
}

You might be tempted to copy an integer from one object to another like this:

MP_INT x, y;

x = y;

Although valid C, this is an error. Rather than copying the integer value from y to x it will make the two variables share storage. Subsequent assignments to one variable would change the other mysteriously. And if you were to clear out both variables subsequently, you would confuse malloc and cause your program to crash.

To copy the value properly, you must use the function mpz_set. (see section Integer Assignment Functions)

Go to the previous, next section.