GMP mpz_array_init is an obsolete function. How should we initialize mpz arrays?

Using the GNU MP Bignum library several times , I was interested to see that the way I previously assigned / initiated arrays is now obsolete. Of the special functions of integers :

5.16 Special functions

The functions in this section are for various special purposes. Most applications they will not need. - Function: void mpz_array_init (mpz_t integer_array, mp_size_t array_size, mp_size_t fixed_num_bits)

This is an obsolete function. Do not use it.

This is how I would allocate and initialize the array mpz_t.

int array_size = 100;
mpz_t *num_arr;
num_arr = malloc(arr_size * sizeof(mpz_t));
mpz_array_init(*num_arr, array_size, 1024);

- , , , , GMP C?

+4
2

mpz_init2, :

for (i = 0; i < array_size; i++) {
    mpz_init2(num_arr[i], 1024);
}

mpz_array_init , . , :

for (i = 0; i < array_size; i++) {
    mpz_clear(num_arr[i]);
}
+7

:

/*
http://scicomp.stackexchange.com/questions/3581/large-array-in-gmp
gcc a.c -lgmp
*/
#include <stdlib.h> // malloc
#include <stdio.h>
#include <gmp.h>

#define LENGTH 100000

int main ()
{       
      /* definition */
    mpz_t *A;
    mpz_t temp;

    mpz_init(temp);

    /* initialization of A */
    A = malloc(LENGTH * sizeof(mpz_t));
    if (A==NULL) {
          printf("ERROR: Out of memory\n");
          return 1;
                 }
    // assign
    mpz_set_ui(temp, 121277777777777777); // using temp var 
    mpz_set(A[4], temp);
    mpz_set_str(A[5], "19999999999999999999999999999999999999999999999999992",10); // using string if number > max 

     // check
    gmp_printf ("%Zd\n",A[4]); // 
    gmp_printf ("%Zd\n",A[5]); // 


    /* no longer need A */
   free(A);
   mpz_clear(temp);

        return 0;
}

?

-1

All Articles