28 #include "interval.hpp"
32 #include "ioflags.hpp"
40 #ifdef CXSC_USE_TLS_PREC
43 __declspec(thread)
unsigned int opdotprec = 0;
45 __thread
unsigned int opdotprec = 0;
50 unsigned int opdotprec = 0;
64 memset(akku,0,BUFFERSIZE);
70 : akku(
new a_btyp[A_LENGTH]), err(from.err), k(from.k)
72 memcpy((
void *)akku,(
void *)from.akku,BUFFERSIZE);
76 : akku(
new a_btyp[A_LENGTH]), err(0.0), k(0)
79 memset(akku,0,BUFFERSIZE);
81 d_radd(&akku,*((a_real *)&dummy));
89 memcpy((
void *)akku,(
void *)from.akku,BUFFERSIZE);
99 memset(akku,0,BUFFERSIZE);
100 d_radd(&akku,*((a_real *)&dummy));
105 dotprecision::~dotprecision()
113 d_dadd(&(tmp.akku),(Dotprecision)b.akku);
114 tmp.err = addu(a.err,b.err);
123 d_dadd(&(tmp.akku),(Dotprecision)a.akku);
124 tmp.err = addu(a.err,b.err);
132 d_radd(&(erg.akku),*((a_real *)&r));
139 d_radd(&(erg.akku),*((a_real *)&r));
146 d_radd(&(erg.akku),-*((a_real *)&r));
154 d_radd(&(erg.akku),*((a_real *)&r));
160 d_radd(&d.akku,*((a_real *)&r));
166 d_dadd(&(d.akku),(Dotprecision)(d2.akku));
167 d.err = addu(d.err,d2.err);
173 d_radd(&d.akku,-*((a_real *)&r));
181 d_dadd(&(d.akku),(Dotprecision)(tmp.akku));
182 d.err = addu(d.err,d2.err);
205 int leftsign = sign(a);
206 if (leftsign != sign(b) )
210 int leftstart = (a_intg)a.akku[A_BEGIN];
211 int leftend = (a_intg)a.akku[A_END];
212 int rightstart = (a_intg)b.akku[A_BEGIN];
213 int rightend = (a_intg)b.akku[A_END];
215 if (leftend < rightstart || rightend < leftstart)
220 while (res && leftstart < rightstart)
221 res = (a.akku[leftstart++] == ZERO);
223 while (res && rightstart < leftstart)
224 res = (b.akku[rightstart++] == ZERO);
226 while (res && leftstart <= leftend && leftstart <= rightend)
228 res = (a.akku[leftstart++] == b.akku[rightstart++]);
231 while (res && leftstart <= leftend)
232 res = (a.akku[leftstart++] == ZERO);
233 while (res && rightstart <= rightend)
234 res = (b.akku[rightstart++] == ZERO);
238 return res && (a.err == b.err);
243 int res =
true, cont;
249 int leftsign = sign(a);
250 int rightsign = sign(b);
251 if (leftsign != rightsign)
252 res = (leftsign < rightsign);
253 else if (leftsign == 0)
257 int leftstart = (a_intg)a.akku[A_BEGIN];
258 int leftend = (a_intg)a.akku[A_END];
259 int rightstart = (a_intg)b.akku[A_BEGIN];
260 int rightend = (a_intg)b.akku[A_END];
262 if (leftend < rightstart)
263 res = (leftsign == -1);
264 else if (rightend < leftstart)
265 res = (leftsign != -1);
273 while (cont && leftstart < rightstart)
275 cont = (a.akku[leftstart++] == ZERO);
282 while (cont && rightstart < leftstart)
284 cont = (b.akku[rightstart++] == ZERO);
292 while (cont && leftstart <= leftend && leftstart <= rightend)
294 cont = (a.akku[leftstart] == b.akku[rightstart]);
297 res = (a.akku[leftstart] <= b.akku[rightstart]);
299 leftstart++,rightstart++;
305 while (cont && leftstart <= leftend)
307 cont = (a.akku[leftstart++] == ZERO);
314 while (cont && rightstart <= rightend)
316 cont = (b.akku[rightstart++] == ZERO);
358 *((a_real *)(&r))=d_stan((Dotprecision)d.akku);
359 }
else if(type==RND_UP) {
360 *((a_real *)(&r))=d_stau((Dotprecision)d.akku);
363 *((a_real *)(&r))=d_stad((Dotprecision)d.akku);
370 *((a_real *)(&l))=d_stad(d.akku);
371 *((a_real *)(&u))=d_stau(d.akku);
388 *((a_real *)(&r))=d_stan((Dotprecision)d.akku);
389 }
else if(type==RND_UP) {
390 *((a_real *)(&r))=d_stau((Dotprecision)d.akku);
393 *((a_real *)(&r))=d_stad((Dotprecision)d.akku);
499 this->akku[A_SIGN] = 1 - this->akku[A_SIGN];
505 if(a.akku[A_BEGIN]==ZERO)
507 return (a.akku[A_SIGN] ? -1 : 1);
523 d_padd (&dot.akku,*(a_real*)&a,*(a_real*)&b);
The Data Type dotprecision.
dotprecision(void) noexcept
Constructor of class dotprecision.
dotprecision & operator=(const dotprecision &) noexcept
Implementation of standard assigning operator.
The Scalar Type interval.
The namespace cxsc, providing all functionality of the class library C-XSC.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc) noexcept
Implementation of standard algebraic addition and allocation operation.
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.