7 #ifndef mmx_sign_variation_hpp
8 #define mmx_sign_variation_hpp
16 template<
typename T>
inline
19 return ( x < T(0) ? -1 : (T(0) < x ? 1 : 0) );
26 template<
typename Iterator>
31 while ( *b == 0 && b != e ) b++;
37 for( ++b; b != e; ++
b )
38 if ( (*b != 0) && ( (*b<0) != v ) ) { c++; v = !v; };
44 template<
typename Iterator>
49 while ( *b == 0 && b != e ) b++;
55 for( ++b; c < maxv && b != e; ++
b ) {
56 if ( (*b != 0) && ( (*b<0) != v ) ) {
64 template<
typename Vector>
70 while ( t[i] == 0 && i< l ) i++;
75 for( ++i; c < maxv && i<l; ++i ) {
76 if ( (t[i] != 0) && ( (t[i]<0) != v ) ) {
83 template<
typename Iterator>
89 template<
typename Iterator>
96 if(*b==0)
return false;
101 for( ++b; b != e && no_var; ++
b )
102 if ( (*b<0) != v ) { no_var=
false; };
108 template<
typename Vector>
115 template<
typename Vector>
118 for (i=0; (i<t.size() && t[i]==0); i++) ;
119 if(i==t.size())
return 0;
122 for (ng=(t[i]<=0); i<t.size(); i++)
123 if(ng !=(t[i]<=0))
return 0;
133 template<
typename T>
inline
136 template<
typename T>
inline
140 template<
typename C,
unsigned N>
144 template<
typename C,
unsigned N>
inline
148 template<
typename C>
inline
152 template<
typename C>
inline
168 typedef typename T::const_iterator iter;
170 iter it0=v.begin(),it1=it0;++it1;
171 for(;it1!=v.end();++it0,++it1)
182 typedef typename T::const_iterator iter;
184 iter iti, itj=v.begin()+1;
193 while(iti!=v.end() && (*iti==0)) ++iti;
197 if (std::distance(itj,iti)%2==0)
200 if (
sign(*(itj-1))*
sign(*iti)>0) val=1;
else val=-1;
201 result += val*
pow(-1,std::distance(itj,iti)/2);
221 template<
typename C,
typename Iterator>
225 for (Iterator i=b; i != e; i++) r =
min(r,*i);
229 template<
typename C,
typename Iterator>
233 for (Iterator i=b; i != e; i++) r =
max(r,*i);
239 #endif // realroot_ARITHM_SIGN_H_
int sign_of(const Vector &t)
Definition: sign_variation.hpp:116
T pow(const T &a, int i)
Definition: binomials.hpp:12
const C & b
Definition: Interval_glue.hpp:25
int Count(const T &v)
Definition: sign_variation.hpp:215
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
int Per(const T &v)
Per is computing the number of equal consecutive signs -1 to 1.
Definition: sign_variation.hpp:166
unsigned sign_variation_n(const Vector &t, unsigned l, unsigned maxv)
Definition: sign_variation.hpp:65
C min_value(Iterator b, Iterator e)
Definition: sign_variation.hpp:222
int Eps(const T &v)
Definition: sign_variation.hpp:180
Interval< T, r > min(const Interval< T, r > &a, const Interval< T, r > &b)
Definition: Interval_fcts.hpp:130
ZZ size(const ZZ &z)
Definition: GMPXX.hpp:67
bool has_no_strict_sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:90
const C & c
Definition: Interval_glue.hpp:45
double C
Definition: solver_mv_fatarcs.cpp:16
int sign(const QQ &a)
Definition: GMP.hpp:60
unsigned sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:27
int Var(const T &v)
Definition: sign_variation.hpp:161
C max_value(Iterator b, Iterator e)
Definition: sign_variation.hpp:230
bool has_sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:84
Interval< T, r > max(const Interval< T, r > &a, const Interval< T, r > &b)
Definition: Interval_fcts.hpp:135