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

◆ poly_to_horner_slp()

template<class Field>
int SLP< Field >::poly_to_horner_slp ( int n,
gc_vector< int > & prog,
gc_vector< element_type > & consts,
Nterm *& f )
private

Definition at line 237 of file NAG.cpp.

241{
242 std::vector<int> part_pos(n); // absolute positions of the parts
244 for (int i = 0; i < n; i++)
245 {
247 if (fx == nullptr)
249 else
250 {
253 node_index.push_back(prog.size());
254 prog.push_back(slpPRODUCT);
255 prog.push_back(n - 1 - i); // reference to (n-1-i)-th input (recall: the
256 // order of vars is reversed in monomials)
257 prog.push_back(p - part_pos[i]); // relative position of p
258 }
259 }
260 int c = 0; // count nonzeros
261 if (f != nullptr) c++;
262 for (int i = 0; i < n; i++)
263 if (part_pos[i] != ZERO_CONST) c++;
264 if (c == 0) return ZERO_CONST;
265 if (c == 1 && last_nonzero_part_pos != ZERO_CONST)
267 int cur_p = num_operations++;
268 node_index.push_back(prog.size());
269 prog.push_back(slpMULTIsum);
270 prog.push_back(c);
271 if (f != nullptr)
272 prog.push_back(CONST_OFFSET +
274 consts, element_type(toBigComplex(C, f->coeff))));
275 for (int i = 0; i < n; i++)
276 if (part_pos[i] != ZERO_CONST)
277 prog.push_back(part_pos[i] - cur_p); // relative position of the i-th part
278 return cur_p;
279}
Nterm * extract_divisible_by_x(Nterm *&ff, int i)
Definition NAG.cpp:191
gmp_CC toBigComplex(const CCC *C, ring_elem a)
Definition NAG.hpp:210
int num_operations
Definition NAG.hpp:502
int poly_to_horner_slp(int n, gc_vector< int > &prog, gc_vector< element_type > &consts, Nterm *&f)
Definition NAG.cpp:237
Field::element_type element_type
Definition NAG.hpp:488
gc_vector< int > node_index
Definition NAG.hpp:500
const CCC * C
Definition NAG.hpp:491
Definition NAG.hpp:485

References add_constant_get_position(), C, Nterm::coeff, CONST_OFFSET, extract_divisible_by_x(), node_index, num_operations, p, poly_to_horner_slp(), slpMULTIsum, slpPRODUCT, toBigComplex(), and ZERO_CONST.

Referenced by make(), and poly_to_horner_slp().