( Integer Special Functions

Info Catalog ( Miscellaneous Integer Functions ( Integer Functions
 Special Functions
 The functions in this section are for various special purposes.  Most
 applications will not need them.
  - Function: void mpz_array_init (mpz_t INTEGER_ARRAY, size_t
           ARRAY_SIZE, mp_size_t FIXED_NUM_BITS)
      This is a special type of initialization.  *Fixed* space of
      FIXED_NUM_BITS is allocated to each of the ARRAY_SIZE integers in
      INTEGER_ARRAY.  There is no way to free the storage allocated by
      this function.  Don't call `mpz_clear'!
      The INTEGER_ARRAY parameter is the first `mpz_t' in the array.  For
           mpz_t  arr[20000];
           mpz_array_init (arr[0], 20000, 512);
      This function is only intended for programs that create a large
      number of integers and need to reduce memory usage by avoiding the
      overheads of allocating and reallocating lots of small blocks.  In
      normal programs this function is not recommended.
      The space allocated to each integer by this function will not be
      automatically increased, unlike the normal `mpz_init', so an
      application must ensure it is sufficient for any value stored.
      The following space requirements apply to various routines,
         * `mpz_abs', `mpz_neg', `mpz_set', `mpz_set_si' and
           `mpz_set_ui' need room for the value they store.
         * `mpz_add', `mpz_add_ui', `mpz_sub' and `mpz_sub_ui' need room
           for the larger of the two operands, plus an extra
         * `mpz_mul', `mpz_mul_ui' and `mpz_mul_ui' need room for the sum
           of the number of bits in their operands, but each rounded up
           to a multiple of `mp_bits_per_limb'.
         * `mpz_swap' can be used between two array variables, but not
           between an array and a normal variable.
      For other functions, or if in doubt, the suggestion is to
      calculate in a regular `mpz_init' variable and copy the result to
      an array variable with `mpz_set'.
  - Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC)
      Change the space for INTEGER to NEW_ALLOC limbs.  The value in
      INTEGER is preserved if it fits, or is set to 0 if not.  The return
      value is not useful to applications and should be ignored.
      `mpz_realloc2' is the preferred way to accomplish allocation
      changes like this.  `mpz_realloc2' and `_mpz_realloc' are the same
      except that `_mpz_realloc' takes its size in limbs.
  - Function: mp_limb_t mpz_getlimbn (mpz_t OP, mp_size_t N)
      Return limb number N from OP.  The sign of OP is ignored, just the
      absolute value is used.  The least significant limb is number 0.
      `mpz_size' can be used to find how many limbs make up OP.
      `mpz_getlimbn' returns zero if N is outside the range 0 to
  - Function: size_t mpz_size (mpz_t OP)
      Return the size of OP measured in number of limbs.  If OP is zero,
      the returned value will be zero.
Info Catalog ( Miscellaneous Integer Functions ( Integer Functions
automatically generated byinfo2html