1 #ifndef realroot_MPOLDSE_VCTOPS_H
2 #define realroot_MPOLDSE_VCTOPS_H
12 template<
typename A,
typename B>
inline
13 void padd( A * a,
const B *
b,
unsigned sz,
int sta = 1,
int stb = 1 )
15 for ( A * ea = a; ea != a+sz*sta; *ea += *
b , ea += sta, b += stb ) {}
18 template<
typename A,
typename B,
typename C>
inline
19 void padd( A * a,
const B *
b,
const C *
c,
unsigned sz,
20 int sta = 1,
int stb = 1,
int stc = 1 )
22 for ( A * ea = a; ea != a+sz*sta; *ea = *b+*
c, ea += sta, b += stb, c += stc ) ;
25 template<
typename A,
typename B>
inline
26 void psub( A * a,
const B *
b,
unsigned sz,
int sta = 1,
int stb = 1 )
28 for ( A * ea = a; ea != a+sz*sta; *ea -= *
b, ea += sta, b += stb ) ;
31 template<
typename A,
typename B,
typename C>
inline
32 void psub( A * a,
const B *
b,
const C *
c,
unsigned sz,
int sta = 1,
int stb = 1,
int stc = 1 )
34 for ( A * ea = a; ea != a+sz*sta; *ea = *b-*
c, ea += sta, b += stb, c += stc ) ;
37 template<
typename A,
typename B>
inline
38 void pmul( A * a,
const B *
b,
int sz,
int sta = 1,
int stb = 1 )
40 for ( A * ea = a; ea != a+sz*sta; *ea *= *
b, ea += sta, b += stb ) ;
43 template<
typename A,
typename B,
typename C>
inline
44 void pmul( A * a,
const B *
b,
const C *
c,
unsigned sz,
int sta = 1,
int stb = 1,
int stc = 1 )
46 for ( A * ea = a; ea != a+sz*sta; *ea = *b**
c, ea += sta, b += stb, c += stc ) ;
49 template<
typename A,
typename B>
inline
50 void pdiv( A * a,
const B *
b,
unsigned sz,
int sta = 1,
int stb = 1 )
52 for ( A * ea = a; ea != a+sz*sta; *ea /= *
b, ea += sta, b += stb ) ;
55 template<
typename A,
typename B,
typename C>
inline
56 void pdiv( A * a,
const B *
b,
const C *
c,
unsigned sz,
int sta = 1,
int stb = 1,
int stc = 1 )
58 for ( A * ea = a; ea != a+sz*sta; *ea = *b/(*c), ea += sta, b += stb, c += stc ) ;
61 template<
typename A,
typename B>
inline
62 void scadd( A * a,
const B&
b,
unsigned n,
int s = 1 )
64 for ( A * ea = a; ea != a + n*s; *a +=
b, ea += s ) ;
67 template<
typename A,
typename B,
typename C>
inline
68 void scadd( A * a,
const B *
b,
const C&
c,
unsigned n,
int sa = 1,
int sb = 1 )
70 for ( A * ea = a; ea != a + n*sa; *ea = *b +
c, ea += sa, b += sb ) ;
73 template<
typename A,
typename B>
inline
74 void scsub( A * a,
const B&
b,
unsigned n,
int s = 1 )
76 for ( A * ea = a; ea != a + n*s; *ea -=
b, ea += s ) ;
79 template<
typename A,
typename B>
inline
80 void scsub(
const B&
b, A * a,
unsigned n,
int s = 1 )
82 for ( A * ea = a; ea != a+n*s; *ea = b-*ea, ea += s ) ;
85 template<
typename A,
typename B,
typename C>
inline
86 void scsub( A * a,
const B *
b,
const C&
c,
unsigned n,
int sa = 1,
int sb = 1 )
88 for ( A * ea = a; ea != a+n*sa; *ea = *b-
c, ea += sa, b += sb ) ;
91 template<
typename A,
typename B,
typename C>
inline
92 void scsub( A * a,
const B&
b,
const C *
c,
unsigned n,
int sa = 1,
int sb = 1 )
94 for ( A * ea = a; ea != a+n*sa; *ea = c-*
b, ea += sa, b += sb ) ;
97 template<
typename A,
typename B>
inline
98 void scmul( A * a,
const B&
b,
unsigned n,
int s = 1 )
100 for ( A * ea = a; ea != a+n*s; *ea *=
b, ea += s ) ;
103 template<
typename A,
typename B,
typename C>
inline
104 void scmul( A * a,
const B *
b,
const C&
c,
unsigned n,
int sa = 1,
int sb = 1 )
106 for ( A * ea = a; ea != a + n*sa; *ea = *b*
c, ea += sa, b += sb ) ;
109 template<
typename A,
typename B,
typename C>
inline
110 void scmul( A * a,
const A * _a,
const B *
b,
const C&
c )
112 for ( A * ea = a; ea != _a; *ea++ = *b++*
c ) ;
115 template<
typename A,
typename B>
inline
116 void scdiv( A * a,
const B&
b,
unsigned n,
int s = 1 )
118 for ( A * ea = a; ea != a+n*s; *ea /=
b, ea += s ) ;
121 template<
typename A,
typename B>
inline
122 void scdiv(
const B&
b, A * a,
unsigned n,
int s = 1 )
124 for ( A * ea = a; ea != a+n*s; *ea = b/(*ea), ea += s ) ;
127 template<
typename A,
typename B,
typename C>
inline
128 void scdiv( A * a,
const B *
b,
const C&
c,
unsigned n,
int sa = 1,
int sb = 1 )
130 for ( A * ea = a; ea != a + n*sa; *ea = *b/
c, ea += sa, b += sb ) ;
133 template<
typename A,
typename B,
typename C>
inline
134 void scdiv( A * a,
const C&
c,
const B *
b ,
unsigned n,
int sa = 1,
int sb = 1 )
136 for ( A * ea = a; ea != a + n*sa; *ea = c/(*b), ea += sa, b += sb ) ;
139 template<
typename A,
typename B>
inline
140 void copy ( A * a,
const B *
b,
unsigned n )
145 template<
typename A,
typename B>
inline
146 void copy ( A * a,
const B *
b,
unsigned n,
int sa,
int sb )
148 for ( A * ea = a; ea != a + n*sa; *ea = *
b, ea += sa, b += sb ) ;
152 void fill(
C * a,
unsigned n,
int s,
const C& x )
154 for (
C * pa = a; pa != a+n*s; *pa = x, pa += s ) ;
157 template<
typename A,
typename B>
inline
158 void icopy( A * a,
unsigned * aadd,
unsigned nadd,
const B *
b )
160 for (
unsigned * ea = aadd; ea != aadd + nadd; a[*ea++] = *b++ ) ;
163 template<
typename A,
typename B>
inline
164 void ipadd( A * a,
unsigned * aadd,
unsigned nadd,
const B *
b )
166 for (
unsigned * ea = aadd; ea != aadd + nadd; a[*ea++] += *b++ ) ;
169 template<
typename A,
typename B>
inline
170 void ipsub( A * a,
unsigned * aadd,
unsigned nadd,
const B *
b )
172 for (
unsigned * ea = aadd; ea != aadd + nadd; a[*ea++] -= *b++ ) ;
176 template<
typename A,
typename B>
inline
177 void accmin( A& mn, B
const * v,
unsigned n,
int s = 1 )
180 for ( p = v; p != v + n*s; p += s )
181 if ( mn > *p ) mn = *p;
184 template<
typename A,
typename B>
inline
185 void min( A& mn, B
const * v,
unsigned n,
int s = 1 )
191 template<
typename A,
typename B>
inline
192 void accmax( A& mx,
const B * v,
unsigned n,
int s = 1 )
195 for ( p = v; p != v+n*s; p += s )
196 if ( mx < *p ) mx = *p;
199 template<
typename A,
typename B>
inline
200 void max( A& mx, B
const * v,
unsigned n,
int s = 1 )
205 template<
typename A>
inline
206 void print(
const A * p,
unsigned n,
int st = 1,
207 std::ostream& o = std::cout )
211 for ( i = p; i != p + (n-1)*st; i += st )
230 unsigned nr,
int str,
233 unsigned na,
int sta,
236 unsigned nb,
int stb )
238 if ( na < nb ) {
conv(r,nr,str,b,nb,stb,a,na,sta);
return; };
241 const C * ea, * eb, * eeb, * eea;
245 for ( er = r, eb = b, k = 0; k <
std::min(nb,nr); k ++, er += str, eb += stb )
246 for ( eeb = eb, ea = a, *er = 0, l = 0;
248 *er += *ea**eeb, l ++, eeb -= stb, ea += sta ) ;
250 for ( ; k <
std::min(na,nr) ; k ++, er += str )
252 l = k-nb+1, eeb = b +(nb-1)*stb , ea = a + l*sta;
255 l ++, eeb -= stb, ea += sta ) ;
257 for ( ; k < nr; k ++, er += str )
259 l = k-nb+1, eeb = b+(nb-1)*stb, ea = a + l*sta;
262 l ++, eeb -= stb, ea += sta ) ;
278 const C * a,
unsigned na,
int sta,
279 const C *
b,
unsigned nb,
int stb )
283 for ( ea = a; ea != a + na*sta; ea += sta, r += str )
284 for ( er = r, eb = b; eb != b + nb*stb; eb += stb, er += str )
301 const C * a,
unsigned na,
int sta,
302 const C *
b,
unsigned nb,
int stb )
305 for ( er = r; er != r + (na+nb-1)*str; *er++ = 0 ) ;
306 accconv(r,str,a,na,sta,b,nb,stb);
316 template<
class C>
inline
317 void minmax(
C& m,
C& M,
const C * a,
unsigned n,
unsigned s = 1 )
319 for (
const C * e = a + n*s-s, m = M = *e; a < e; a += 2*s )
323 if ( *a > M ) M = *a;
324 if ( *(a+s) < m ) m = *(a+s) ;
328 if ( *a > M ) M = *a;
329 if ( *(a+s) < m ) m = *(a+s) ;
334 template<
class C>
inline
336 unsigned na,
unsigned nb )
339 const C * ea(a), * eb(b);
344 while( ea < a && *ea < *eb ) *er++ = *ea++;
345 if ( ea == a ) {
std::copy(eb,b,er) ;
break; };
346 if ( *ea == *eb ) { *er++ = *ea++; eb++;};
347 while( eb < b && *eb < *ea ) *er++ = *eb++;
348 if ( eb == b ) {
std::copy(ea,a,er);
break; };
349 if ( *eb == *ea ) { *er++ = *eb++; ea++;};
354 template<
class C>
inline
356 const C * a,
unsigned na,
int sta,
357 const C *
b,
unsigned nb,
int stb )
360 const C * ea(a), * eb(b);
367 for (;ea != a && *ea < *eb; *er = *ea, er += str, ea += sta ) ;
371 for ( ; eb !=
b; *er = *eb, er += str, eb += stb ) ;
383 for (;eb != b && *eb < *ea; *er = *eb, er += str, eb += stb ) ;
387 for ( ; ea != a; *er = *ea, er += str, ea += sta ) ;
404 template <
class C >
static
405 void shift (
C * p,
const C &
c,
unsigned n,
int is = 1)
408 for (s = n, j = 0; j <= s - 2; j++)
409 for (k = s - 2; k >= j; p[k * is] += c * p[k * is + is], k--) ;
412 template <
class C >
static
413 void scale (
C * p,
const C & s,
unsigned n,
int is = 1)
416 for (
C * cp = p + is; cp != p + n * is; *cp *= pw, pw *= s, cp += is) ;
419 template<
class O,
class C,
class I>
inline
420 void horner( O& o,
C const *
const c,
unsigned n,
const I& i,
int s = 1 )
423 for (
int p = (n-1)*s; p != 0; o += as<O>(c[p]), o *= i, p -= s ) ;
428 horner(
C const *
const c,
unsigned n,
const I& i,
int s = 1 )
435 template<
class O,
class C,
class I>
inline
436 void hhorner( O& o,
C const *
const c,
unsigned n,
const I& i,
const I&i0,
int s = 1 )
439 for (
int p = (n-2)*s; p >= 0; o *= i, o += O(c[p])*i0, p -= s ) ;
444 hhorner(
C const *
const c,
unsigned n,
const I& i,
const I&i0,
int s = 1 )
452 template<
typename C>
inline
453 void diff(
C * dst,
C const *
const src,
unsigned sz,
int st = 1 )
455 for (
unsigned i = 0; i < sz-1; dst[i*st] = (i+1)*src[(i+1)*st], i++ ) ;
458 template<
typename C,
typename I>
462 for ( ec = c + (n-1)*s; ec !=
c; ec -= s )
463 for ( p = c; p != ec; p += s )
464 *p = (1.0-i)**p+i**(p+s) ;
467 template<
class O,
class C,
class I>
inline
468 void dhorner( O& p, O& dp,
C const *
const c,
unsigned n,
const I& t,
int s = 1 )
470 p = c[n-1], dp = 0.0;
471 for (
int j = (n-2)*s; j >=0; dp=dp*t+p, p=p*t+c[j], j -= s ) ;
476 void inverses( A * a, A * ea ) {
for ( ;a != ea; *a++ = 1/(*a) ) ; };
479 template<
typename real_t>
480 real_t
min( real_t
const * src,
int sz,
int st = 1 )
483 for (
int p = st; p != sz*st; p += st )
if ( r > src[p] ) r = src[p];
487 template<
typename real_t>
488 real_t
max( real_t
const * src,
int sz,
int st = 1 )
491 for (
int p = st; p != sz*st; p += st )
if ( r < src[p] ) r = src[p];
unsigned mmerge(C *r, const C *a, const C *b, unsigned na, unsigned nb)
Definition: tensor_vctops.hpp:335
void inverses(A *a, A *ea)
Definition: tensor_vctops.hpp:476
void min(A &mn, B const *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:185
void ipsub(A *a, unsigned *aadd, unsigned nadd, const B *b)
Definition: tensor_vctops.hpp:170
void accmin(A &mn, B const *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:177
void hhorner(O &o, C const *const c, unsigned n, const I &i, const I &i0, int s=1)
Definition: tensor_vctops.hpp:436
void scdiv(A *a, const B &b, unsigned n, int s=1)
Definition: tensor_vctops.hpp:116
void fill(C *a, unsigned n, int s, const C &x)
Definition: tensor_vctops.hpp:152
void diff(C *dst, C const *const src, unsigned sz, int st=1)
Definition: tensor_vctops.hpp:453
const C & b
Definition: Interval_glue.hpp:25
void shift(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:257
const Interval & I
Definition: Interval_glue.hpp:49
void conv(C *r, unsigned nr, int str, const C *a, unsigned na, int sta, const C *b, unsigned nb, int stb)
Definition: tensor_vctops.hpp:229
void ipadd(A *a, unsigned *aadd, unsigned nadd, const B *b)
Definition: tensor_vctops.hpp:164
void copy(A *a, const B *b, unsigned n)
Definition: tensor_vctops.hpp:140
sfirstnn< typename ringof_< _X, _Y >::T, KXY, KYX, typename sup< X, Y >::T >::T T
Definition: texp_ringof.hpp:81
void accconv(C *r, int str, const C *a, unsigned na, int sta, const C *b, unsigned nb, int stb)
Definition: tensor_vctops.hpp:277
void scsub(A *a, const B &b, unsigned n, int s=1)
Definition: tensor_vctops.hpp:74
void dhorner(O &p, O &dp, C const *const c, unsigned n, const I &t, int s=1)
Definition: tensor_vctops.hpp:468
void decasteljau(C *c, unsigned n, const I &i, int s=1)
Definition: tensor_vctops.hpp:459
void icopy(A *a, unsigned *aadd, unsigned nadd, const B *b)
Definition: tensor_vctops.hpp:158
void minmax(C &m, C &M, const C *a, unsigned n, unsigned s=1)
Definition: tensor_vctops.hpp:317
void pmul(A *a, const B *b, int sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:38
void copy(A *a, const B *b, unsigned n, int sa, int sb)
Definition: tensor_vctops.hpp:146
#define min(a, b)
Definition: parser_def.c:475
void scadd(A *a, const B &b, unsigned n, int s=1)
Definition: tensor_vctops.hpp:62
void padd(A *a, const B *b, unsigned sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:13
void print(const A *p, unsigned n, int st=1, std::ostream &o=std::cout)
Definition: tensor_vctops.hpp:206
const C & c
Definition: Interval_glue.hpp:45
double C
Definition: solver_mv_fatarcs.cpp:16
void pdiv(A *a, const B *b, unsigned sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:50
sfirstnn< C, A, B >::T T
Definition: texp_sup.hpp:31
void max(A &mx, B const *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:200
void accmax(A &mx, const B *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:192
void psub(A *a, const B *b, unsigned sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:26
void horner(O &o, C const *const c, unsigned n, const I &i, int s=1)
Definition: tensor_vctops.hpp:420
void scmul(A *a, const B &b, unsigned n, int s=1)
Definition: tensor_vctops.hpp:98