Получение функции с использованием GMP - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть точка (x, y), и я хочу добавить еще одну точку.я пишу только формула, но я хочу получить функцию:

    struct point {
        mpz_t x;
        mpz_t y;
    };

    point my_func(mpz_t x, mpz_t y) {
   /..../
        //lambda
        mpz_sub(a, Y, y);
        mpz_sub(b, X, x);
        mpz_invert(c, b, P);
        mpz_mul(b, a, c);
        mpz_mod(f, b, P);

        //point x
        mpz_mul(a, f, f);
        mpz_sub(b, a, x);
        mpz_sub(c, b, X);
        mpz_mod(d, c, P);

        //point y
        mpz_sub(a, x, d);
        mpz_mul(b, f, a);
        mpz_sub(c, b, y);
        mpz_mod(e, c, P);

        return (x, y);
    }

Мне кажется, что это не должно быть сложно, но я ехал весь день.точка gp = {x, y}; ошибка: массив должен быть инициализирован инициализатором, заключенным в фигурные скобки

Я хочу иметь только точку (x, y), чтобы получить следующую точку на выходе.это не должна быть структура, я пробовал пару и кортеж, это все равно не помогает.

1 Ответ

0 голосов
/ 24 ноября 2018

действительно, зачем что-то беспокоить, если мне нужно просто изменить значения x и y, функция void по ссылке решила проблему, я благодарна за полезный совет, что эта функция работает, и ей нужна оперативная память 600kb

void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
    mpz_t a, b, c, d, f;
    mpz_inits(a, b, c, d, f, 0);
        //lambda
       mpz_sub(a, Y, y);
       mpz_sub(b, X, x);
    mpz_invert(c, b, P);
       mpz_mul(b, a, c);
       mpz_mod(f, b, P);
        //point x
    mpz_mul(a, f, f);
    mpz_sub(b, a, x);
    mpz_sub(c, b, X);
    mpz_mod(d, c, P);
        //point y
    mpz_sub(a, x, d);
    mpz_mul(b, f, a);
    mpz_sub(c, b, y);
    mpz_mod(f, c, P);
        //set x, y
    mpz_set(x, d);
    mpz_set(y, f);

    mpz_clears(a, b, c, d, f, nullptr);
}
...