У меня есть точка (х, у), и я хочу добавить еще одну точку. я пишу только формула, но я хочу получить функцию:
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};
ошибка: массив должен быть инициализирован инициализатором в скобках
Я хочу только иметь точку (х, у), чтобы получить следующую точку на выходе. это не должно быть структура, я пробовал пару и кортеж, это все равно не помогает.
действительно, зачем что-то беспокоить, если мне нужно просто изменить значения х и у
функция void по ссылке решила проблему, благодарна за полезные советы
эта функция работает и нужна оперативная память 600кб
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);
}
Других решений пока нет …