6 #ifndef realroot_SOLVE_SBDSLV_SYSTEM_DOMAIN_HPP
7 #define realroot_SOLVE_SBDSLV_SYSTEM_DOMAIN_HPP
19 template<
class creal_t >
26 void error(
const char * msg ) { m_error->
error( msg ); };
33 inline const interval_t *
current()
const {
return this->
top(); };
46 inline static creal_t
size(
const interval_t& i ) {
return i.upper()-i.lower(); };
50 void init( creal_t * inits )
54 for ( sz_t v = 0; v < this->
nvr(); v ++ )
62 const interval_t * curr(
current());
63 m_small = m_large =
nvr()-1;
64 creal_t mn(curr[
nvr()-1].
size());
65 creal_t mx(curr[
nvr()-1].
size());
66 for ( sz_t v = 0; v <
nvr(); v += 2 )
68 creal_t a = curr[v].size();
69 creal_t
b = curr[v+1].size();
72 if ( b < mn ) { m_small = v + 1; mn =
b; };
73 if ( mx < a ) { m_large = v; mx = a; };
77 if ( a < mn ) { m_small = v; mn = a; };
78 if ( mx < b ) { m_large = v + 1; mx =
b; };
90 dstack( sz_t _nvr_,
const creal_t&
peps,
const creal_t& spleps ):
91 memory::
nstack< interval_t >(_nvr_*2),
97 m_rdprm = (
nvr()-(creal_t)0.5)/(
nvr());
118 interval_t * dm = this->
top();
120 for (
unsigned v = 0; v <
nvr(); v ++ )
122 creal_t a = dm[v].upper();
123 creal_t
b = dm[v].lower()-a;
124 for ( ptr = dst + v; ptr < dst + nsmp *
nvr(); ptr +=
nvr() )
125 *ptr = a + ((creal_t)rand())/((creal_t)RAND_MAX)*b;
133 using namespace numerics::rdw;
135 dwmul(t,intvl.upper())) ;
141 using namespace numerics::rdw;
143 upmul(t,intvl.upper()));
147 void update( interval_t * dst, interval_t * src, interval_t * locals)
151 for ( sz_t v = 0; v <
nvr(); v ++ )
158 creal_t
rdscr( interval_t
const *
const , interval_t
const *
const locals )
162 for ( v = 0, d0=0.0 ; v <
nvr(); d0 +=
size(locals[v]), v ++ ) ;
170 bool reduce( std::vector<interval_t> * ri,
unsigned ) {
171 unsigned nvrs =
nvr();
172 unsigned nsdm = 1, rs[nvrs];
175 for ( sz_t v = 0; v < nvrs; nsdm *= rs[v], v++ )
178 rs[v] = ri[v].size();
183 interval_t *_tmp=
new interval_t[ nsdm * nvrs ];
184 interval_t** sdm =
new interval_t*[ nsdm ];
185 for ( sdm[0] = _tmp, s = 1; s < nsdm; sdm[s] = sdm[s-1] + nvrs, s ++) ;
190 for ( s = 0; s < nsdm; s ++ )
191 for ( a = s, v = 0; v < nvrs; sdm[s][v] = ri[v][a%rs[v]], a/=rs[v], v++ ) ;
195 for ( s = 0; s < nsdm-1; s ++ )
204 bool subdivide( sz_t v = (sz_t)(-1), creal_t m = (creal_t)0 )
207 if ( prec < m_spleps )
return false;
211 if ( m*(1.0-m) < 0.01 ) m = 0.5;
void popall()
Definition: system_nstack.h:54
void push()
Definition: system_nstack.h:35
T dwmul(const T &a, const T &b)
Definition: rounding_mode.hpp:96
void mpush()
Definition: system_dstack.h:104
T upadd(const T &a, const T &b)
Definition: rounding_mode.hpp:86
void fill(C *a, unsigned n, int s, const C &x)
Definition: tensor_vctops.hpp:152
const C & b
Definition: Interval_glue.hpp:25
unsigned sz_t
Definition: system_dstack.h:22
T upper(const Interval< T, r > &x)
Definition: Interval_fcts.hpp:89
void rndsupport(creal_t *dst, int nsmp=1)
Definition: system_dstack.h:116
bool reduce(std::vector< interval_t > *ri, unsigned)
Definition: system_dstack.h:170
sz_t m_large
Definition: system_dstack.h:40
Intervals< creal_t >::rdw_t * top()
Definition: system_nstack.h:34
bool subdivide(sz_t v=(sz_t)(-1), creal_t m=(creal_t) 0)
Definition: system_dstack.h:204
void init(creal_t *inits)
Definition: system_dstack.h:50
Intervals< creal_t >::rdw_t interval_t
Definition: system_dstack.h:23
const creal_t & peps() const
Definition: system_dstack.h:37
T dwadd(const T &a, const T &b)
Definition: rounding_mode.hpp:88
T upmul(const T &a, const T &b)
Definition: rounding_mode.hpp:94
dstack(sz_t _nvr_, const creal_t &peps, const creal_t &spleps)
Definition: system_dstack.h:90
void cpush()
Definition: system_dstack.h:109
Definition: system_nstack.h:18
nstack(unsigned n=1)
Definition: system_nstack.h:37
creal_t rdscr(interval_t const *const , interval_t const *const locals)
Definition: system_dstack.h:158
void receiver(method_base *mb)
Definition: system_dstack.h:25
creal_t prc()
Definition: system_dstack.h:47
Definition: rounding_mode.hpp:71
void reset()
Definition: system_dstack.h:60
method_base * m_error
Definition: system_dstack.h:24
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
void setmem()
Definition: system_dstack.h:103
return T = Y * from X = Y or X = Y *
Definition: texp_strip_qualifiers.hpp:9
#define min(a, b)
Definition: parser_def.c:475
void error(const char *msg)
Definition: system_dstack.h:26
static creal_t _linterp_dw(const interval_t &intvl, const creal_t &t)
Definition: system_dstack.h:131
static creal_t _linterp_up(const interval_t &intvl, const creal_t &t)
Definition: system_dstack.h:139
Definition: Interval_fcts.hpp:604
creal_t m_spleps
Definition: system_dstack.h:37
T lower(const Interval< T, r > &x)
Definition: Interval_fcts.hpp:87
T dwsub(const T &a, const T &b)
Definition: rounding_mode.hpp:92
const creal_t & rdscr_prm() const
Definition: system_dstack.h:40
T upsub(const T &a, const T &b)
Definition: rounding_mode.hpp:90
interval_t * current()
Definition: system_dstack.h:32
void update(interval_t *dst, interval_t *src, interval_t *locals)
Definition: system_dstack.h:147
sz_t nvr() const
Definition: system_dstack.h:35
sz_t largest()
Definition: system_dstack.h:44
creal_t m_peps
Definition: system_dstack.h:35
sz_t smallest()
Definition: system_dstack.h:45
interval_t * previous()
Definition: system_dstack.h:30
sz_t m_nvr
Definition: system_dstack.h:33
Interval< T, r > max(const Interval< T, r > &a, const Interval< T, r > &b)
Definition: Interval_fcts.hpp:135
Definition: system_dstack.h:20
sz_t m_small
Definition: system_dstack.h:42
Definition: method_base.hpp:14
static creal_t size(const interval_t &i)
Definition: system_dstack.h:46
virtual void error(const char *)=0
creal_t m_rdprm
Definition: system_dstack.h:39
#define assert(expr, msg)
Definition: shared_object.hpp:57
void set_precision(const creal_t &peps, const creal_t &spleps=0)
Definition: system_dstack.h:84