Macaulay2 Engine
Loading...
Searching...
No Matches

◆ REDI()

void LLLoperations::REDI ( int k,
int ell,
MutableMatrix * A,
MutableMatrix * Achange,
MutableMatrix * lambda )
staticprivate

Definition at line 108 of file LLL.cpp.

113{
114 // set q = ...
115 // negate q.
116 ring_elem Dl, mkl, q;
117 if (!lambda->get_entry(ell, k, mkl)) return;
118 lambda->get_entry(ell, ell, Dl);
119 mpz_srcptr a = mkl.get_mpz();
120 mpz_srcptr b = Dl.get_mpz(); // b = D#ell
121 mpz_t c, d;
122 mpz_init(c);
123 mpz_init(d);
124 mpz_mul_2exp(c, a, 1); // c = 2*lambda#(k,ell)
125 mpz_abs(d, c); // d = abs(2*lambda#(k,ell)
126 mpz_add(c, c, b); // c = 2*lambda#(k,ell) + D#ell
127 mpz_mul_2exp(d, b, 1); // d = 2*D#ell
128 mpz_fdiv_q(c, c, d); // c = (almost) final q
129 mpz_neg(c, c);
130 q = ring_elem(c);
131
132 // A->addColumnMultiple(ell,q,k);
133 // lambda->addColumnMultiple(ell,q,k);
134
135 A->column_op(k, q, ell);
136 if (Achange) Achange->column_op(k, q, ell);
137 lambda->column_op(k, q, ell);
138
139 mpz_clear(c);
140 mpz_clear(d);
141}
virtual bool get_entry(size_t r, size_t c, ring_elem &result) const =0
virtual bool column_op(size_t i, ring_elem r, size_t j)=0
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References MutableMatrix::column_op(), MutableMatrix::get_entry(), and ring_elem::get_mpz().

Referenced by doLLL().