тип возврата при использовании заголовочного файла GMP.h - PullRequest
3 голосов
/ 06 июня 2010

Пока я использую файл заголовка gmp.h. Мне нужна функция, которая принимает входные данные типа mpz_t и возвращает тип mpz_t. Я очень новичок в использовании gmp.h Итак, вот снимки из моего приближенного кода ...

mpz_t sum_upto(mpz_t max)  
{    
    mpz_t sum;  
    mpz_init(sum);    
    mpz_init(result);  
    for(int i=0;i<=max-1;i++)    
        mpz_add_ui(sum,sum,pow(2,i));   
    return sum;   
}

но будет отображаться ошибка:

  1. pow не использовался в этой области. ", Хотя я добавил math.h в самом начале файла.
  2. sum_upto объявлено как функция, возвращающая массив ...

Ответы [ 2 ]

8 голосов
/ 15 ноября 2012

Соглашение для функций, использующих GMP, можно найти в руководстве . По сути, вы должны следовать тем же соглашениям, что и сам GMP - функция должна иметь возвращаемый тип void, и вы должны указать значение, в которое нужно поместить результат в качестве параметра.

Вот пример, приведенный ниже:

 void foo (mpz_t result, const mpz_t param, unsigned long n)
 {
   unsigned long  i;
   mpz_mul_ui (result, param, n);
   for (i = 1; i < n; i++)
     mpz_add_ui (result, result, i*7);
 }

 int main (void)
 {
   mpz_t  r, n;
   mpz_init (r);
   mpz_init_set_str (n, "123456", 0);
   foo (r, n, 20L);
   gmp_printf ("%Zd\n", r);
   return 0;
 }
0 голосов
/ 06 июня 2010

Попробуйте следующее:

mpz_t sum_upto(mpz_t max)
{
    mpz_t sum;
    mpz_init(sum);
    mpz_init(result);
    int val = 1;
    for(int i=0;i<=max-1;i++) {
        mpz_add_ui(sum,sum,val);
        val *= 2; //compiler should make a shift operation out of it
    }
    return sum;
}

Кроме того, вы можете удалить заголовок math.h.

...