C-XSC - A C++ Class Library for Extended Scientific Computing 2.5.4
cinterval.hpp
1/*
2** CXSC is a C++ library for eXtended Scientific Computing (V 2.5.4)
3**
4** Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik,
5** Universitaet Karlsruhe, Germany
6** (C) 2000-2014 Wiss. Rechnen/Softwaretechnologie
7** Universitaet Wuppertal, Germany
8**
9** This library is free software; you can redistribute it and/or
10** modify it under the terms of the GNU Library General Public
11** License as published by the Free Software Foundation; either
12** version 2 of the License, or (at your option) any later version.
13**
14** This library is distributed in the hope that it will be useful,
15** but WITHOUT ANY WARRANTY; without even the implied warranty of
16** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17** Library General Public License for more details.
18**
19** You should have received a copy of the GNU Library General Public
20** License along with this library; if not, write to the Free
21** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*/
23
24/* CVS $Id: cinterval.hpp,v 1.24 2014/01/30 17:23:44 cxsc Exp $ */
25
26#ifndef _CXSC_CINTERVAL_HPP_INCLUDED
27#define _CXSC_CINTERVAL_HPP_INCLUDED
28
29#include <iostream>
30#include <string>
31
32// Headerfile for cinterval.
33
34#include "except.hpp"
35#include "real.hpp"
36#include "complex.hpp"
37#include "interval.hpp"
38
39namespace cxsc {
40
41class civector;
42class cimatrix;
43class civector_slice;
44class cimatrix_slice;
45
47
55{
56 private:
57 // ---- private data ----------------------------------------
58 interval re;
59 interval im;
60
61 public:
62 // ---- implicit constructors ------------------------------
64 inline cinterval(void) noexcept {}
66 inline cinterval(const interval & a,const interval &b) noexcept;
68 inline cinterval(const complex & a,const complex & b) ;
69
70 // The following are defined in the specific vector, matrix-files
71#if(CXSC_INDEX_CHECK)
73 INLINE cinterval(const civector &) ;
75 INLINE cinterval(const civector_slice &);
77 INLINE cinterval(const cimatrix &) ;
79 INLINE cinterval(const cimatrix_slice &);
80#else
82 INLINE cinterval(const civector &) noexcept;
84 INLINE cinterval(const civector_slice &) noexcept;
86 INLINE cinterval(const cimatrix &) noexcept;
88 INLINE cinterval(const cimatrix_slice &) noexcept;
89#endif
90 // ---- explicit constructors -------------------------------
91
93 explicit inline cinterval(const real & a) noexcept;
95 explicit inline cinterval(const interval & a) noexcept;
97 explicit inline cinterval(const complex & a) noexcept;
99 explicit cinterval(const dotprecision &) noexcept;
101 explicit cinterval(const cdotprecision &) noexcept;
103 explicit cinterval(const idotprecision &) noexcept;
105 explicit cinterval(const cidotprecision &) noexcept;
107 explicit cinterval(const l_cinterval&) noexcept;
108
109 // ---- assignments -----------------------------------------
110
112 inline cinterval & operator =(const real &) noexcept;
114 inline cinterval & operator =(const interval &) noexcept;
116 inline cinterval & operator =(const complex &) noexcept;
118 inline cinterval & operator =(const cinterval &) noexcept;
119
121 inline cinterval & operator =(const dotprecision &) noexcept;
123 inline cinterval & operator =(const idotprecision &) noexcept;
125 inline cinterval & operator =(const cdotprecision &) noexcept;
127 inline cinterval & operator =(const cidotprecision &) noexcept;
129 cinterval & operator = (const l_cinterval&) noexcept;
131 cinterval & operator = (const lx_cinterval&) noexcept;
132
133 // ---- compatiblility typecasts ----------------------------
134
136 friend inline cinterval _cinterval(const real &) noexcept;
138 friend inline cinterval _cinterval(const interval &) noexcept;
140 friend inline cinterval _cinterval(const complex &) noexcept;
142 friend inline cinterval _cinterval(const dotprecision &) noexcept;
144 friend inline cinterval _cinterval(const idotprecision &) noexcept;
146 friend inline cinterval _cinterval(const cdotprecision &) noexcept;
148 friend inline cinterval _cinterval(const cidotprecision &) noexcept;
149
151 friend inline cinterval _cinterval(const interval &,const interval &) noexcept;
153 friend inline cinterval _cinterval(const real &,const interval &) noexcept;
155 friend inline cinterval _cinterval(const interval &,const real &) noexcept;
157 friend inline cinterval _cinterval(const complex &,const complex &) noexcept;
159 friend inline cinterval _cinterval(const real &,const complex &) noexcept;
161 friend inline cinterval _cinterval(const complex &,const real &) noexcept;
163 friend inline cinterval _unchecked_cinterval(const complex &,const complex &) noexcept;
165 friend inline cinterval _unchecked_cinterval(const real &,const complex &) noexcept;
167 friend inline cinterval _unchecked_cinterval(const complex &,const real &) noexcept;
168
169 // ---- Input/Output ---------------------------------------
170
172 friend std::ostream & operator <<(std::ostream &,const cinterval &) noexcept;
174 friend std::istream & operator >>(std::istream &,cinterval &) ;
176 friend std::string & operator <<(std::string &,const cinterval &) noexcept;
178 friend std::string & operator >>(std::string &,cinterval &) ;
180 friend void operator >>(const char *,cinterval &) ;
182 friend void operator >>(const std::string &,cinterval &) ;
183
184 // ---- Std.Operators ---------------------------------------
185
187 friend inline cinterval operator -(const cinterval &) noexcept;
189 friend inline cinterval operator +(const cinterval &) noexcept;
191 friend inline bool operator! (const cinterval & a) noexcept;
192
193 // CI-CI
194
196 friend inline cinterval operator +(const cinterval &,const cinterval &) noexcept;
198 friend inline cinterval operator -(const cinterval &,const cinterval &) noexcept;
200 friend cinterval operator *(const cinterval &,const cinterval &) noexcept;
202 friend cinterval operator /(const cinterval &,const cinterval &);
204 friend inline cinterval operator |(const cinterval &,const cinterval &) noexcept;
206 friend inline cinterval operator &(const cinterval &,const cinterval &);
207
209 friend inline cinterval & operator +=(cinterval &, const cinterval &) noexcept;
211 friend inline cinterval & operator -=(cinterval &, const cinterval &) noexcept;
213 friend inline cinterval & operator *=(cinterval &, const cinterval &) noexcept;
215 friend inline cinterval & operator /=(cinterval &, const cinterval &) noexcept;
217 friend inline cinterval & operator |=(cinterval &, const cinterval &) noexcept;
219 friend inline cinterval & operator &=(cinterval &, const cinterval &);
220
221 // CI-R
222
224 friend inline cinterval operator +(const cinterval &,const real &) noexcept;
226 friend inline cinterval operator +(const real &,const cinterval &) noexcept;
228 friend inline cinterval operator -(const cinterval &,const real &) noexcept;
230 friend inline cinterval operator -(const real &,const cinterval &) noexcept;
232 friend inline cinterval operator *(const cinterval &,const real &) noexcept;
234 friend inline cinterval operator *(const real &,const cinterval &) noexcept;
236 friend inline cinterval operator /(const cinterval &,const real &) noexcept;
238 friend inline cinterval operator /(const real &,const cinterval &) noexcept;
240 friend inline cinterval operator |(const cinterval &,const real &) noexcept;
242 friend inline cinterval operator |(const real &,const cinterval &) noexcept;
244 friend inline cinterval operator &(const cinterval &,const real &) noexcept;
246 friend inline cinterval operator &(const real &,const cinterval &) noexcept;
247
249 friend inline cinterval & operator +=(cinterval &, const real &) noexcept;
251 friend inline cinterval & operator -=(cinterval &, const real &) noexcept;
253 friend inline cinterval & operator *=(cinterval &, const real &) noexcept;
255 friend inline cinterval & operator /=(cinterval &, const real &) noexcept;
257 friend inline cinterval & operator |=(cinterval &, const real &) noexcept;
259 friend inline cinterval & operator &=(cinterval &, const real &) noexcept;
260
261 // CI-I
262
264 friend inline cinterval operator +(const cinterval &,const interval &) noexcept;
266 friend inline cinterval operator +(const interval &,const cinterval &) noexcept;
268 friend inline cinterval operator -(const cinterval &,const interval &) noexcept;
270 friend inline cinterval operator -(const interval &,const cinterval &) noexcept;
272 friend inline cinterval operator *(const cinterval &,const interval &) noexcept;
274 friend inline cinterval operator *(const interval &,const cinterval &) noexcept;
276 friend inline cinterval operator /(const cinterval &,const interval &) noexcept;
278 friend inline cinterval operator /(const interval &,const cinterval &) noexcept;
280 friend inline cinterval operator |(const cinterval &,const interval &) noexcept;
282 friend inline cinterval operator |(const interval &,const cinterval &) noexcept;
284 friend inline cinterval operator &(const cinterval &,const interval &) noexcept;
286 friend inline cinterval operator &(const interval &,const cinterval &) noexcept;
287
289 friend inline cinterval & operator +=(cinterval &, const interval &) noexcept;
291 friend inline cinterval & operator -=(cinterval &, const interval &) noexcept;
293 friend inline cinterval & operator *=(cinterval &, const interval &) noexcept;
295 friend inline cinterval & operator /=(cinterval &, const interval &) noexcept;
297 friend inline cinterval & operator |=(cinterval &, const interval &) noexcept;
299 friend inline cinterval & operator &=(cinterval &, const interval &) noexcept;
300
301 // CI-C
302
304 friend inline cinterval operator +(const cinterval &,const complex &) noexcept;
306 friend inline cinterval operator +(const complex &,const cinterval &) noexcept;
308 friend inline cinterval operator -(const cinterval &,const complex &) noexcept;
310 friend inline cinterval operator -(const complex &,const cinterval &) noexcept;
312 friend inline cinterval operator *(const cinterval &,const complex &) noexcept;
314 friend inline cinterval operator *(const complex &,const cinterval &) noexcept;
316 friend inline cinterval operator /(const cinterval &,const complex &) noexcept;
318 friend inline cinterval operator /(const complex &,const cinterval &) noexcept;
320 friend inline cinterval operator |(const cinterval &,const complex &) noexcept;
322 friend inline cinterval operator |(const complex &,const cinterval &) noexcept;
324 friend inline cinterval operator &(const cinterval &,const complex &) noexcept;
326 friend inline cinterval operator &(const complex &,const cinterval &) noexcept;
327
328
330 friend inline cinterval & operator +=(cinterval &, const complex &) noexcept;
332 friend inline cinterval & operator -=(cinterval &, const complex &) noexcept;
334 friend inline cinterval & operator *=(cinterval &, const complex &) noexcept;
336 friend inline cinterval & operator /=(cinterval &, const complex &) noexcept;
338 friend inline cinterval & operator |=(cinterval &, const complex &) noexcept;
340 friend inline cinterval & operator &=(cinterval &, const complex &) noexcept;
341
342 // C-R
343
345 friend inline cinterval operator |(const complex &,const real &) noexcept;
347 friend inline cinterval operator |(const real &,const complex &) noexcept;
348
349 // C-I
350
352 friend inline cinterval operator +(const complex &,const interval &) noexcept;
354 friend inline cinterval operator +(const interval &,const complex &) noexcept;
356 friend inline cinterval operator -(const complex &,const interval &) noexcept;
358 friend inline cinterval operator -(const interval &,const complex &) noexcept;
360 friend inline cinterval operator *(const complex &,const interval &) noexcept;
362 friend inline cinterval operator *(const interval &,const complex &) noexcept;
364 friend inline cinterval operator /(const complex &,const interval &) noexcept;
366 friend inline cinterval operator /(const interval &,const complex &) noexcept;
368 friend inline cinterval operator |(const complex &,const interval &) noexcept;
370 friend inline cinterval operator |(const interval &,const complex &) noexcept;
372 friend inline cinterval operator &(const complex &,const interval &) noexcept;
374 friend inline cinterval operator &(const interval &,const complex &) noexcept;
375
376
377 // C-C
378
380 friend inline cinterval operator |(const complex &,const complex &) noexcept;
381
382 // ---- Comp.Operat. ---------------------------------------
383
385 friend inline bool operator== (const cinterval & a, const cinterval & b) noexcept;
387 friend inline bool operator!= (const cinterval & a, const cinterval & b) noexcept;
388
389 // CI-R
390
392 friend inline bool operator== (const cinterval & a, const real & b) noexcept;
394 friend inline bool operator== (const real & a, const cinterval & b) noexcept;
396 friend inline bool operator!= (const cinterval & a, const real & b) noexcept;
398 friend inline bool operator!= (const real & a, const cinterval & b) noexcept;
399
400 // CI-I
401
403 friend inline bool operator== (const cinterval & a, const interval & b) noexcept;
405 friend inline bool operator== (const interval & a, const cinterval & b) noexcept;
407 friend inline bool operator!= (const cinterval & a, const interval & b) noexcept;
409 friend inline bool operator!= (const interval & a, const cinterval & b) noexcept;
410
411 // CI-C
412
414 friend inline bool operator== (const cinterval & a, const complex & b) noexcept;
416 friend inline bool operator== (const complex & a, const cinterval & b) noexcept;
418 friend inline bool operator!= (const cinterval & a, const complex & b) noexcept;
420 friend inline bool operator!= (const complex & a, const cinterval & b) noexcept;
421
422 // ---- Set Operators ----
423
425 friend inline bool operator <(const cinterval &,const cinterval &) noexcept;
427 friend inline bool operator >(const cinterval &,const cinterval &) noexcept;
429 friend inline bool operator <=(const cinterval &,const cinterval &) noexcept;
431 friend inline bool operator >=(const cinterval &,const cinterval &) noexcept;
432
433 // CI-R
434
436 friend inline bool operator <(const real &,const cinterval &) noexcept;
438 friend inline bool operator >(const real &,const cinterval &) noexcept;
440 friend inline bool operator <=(const real &,const cinterval &) noexcept;
442 friend inline bool operator >=(const real &,const cinterval &) noexcept;
443
445 friend inline bool operator <(const cinterval &,const real &) noexcept;
447 friend inline bool operator >(const cinterval &,const real &) noexcept;
449 friend inline bool operator <=(const cinterval &,const real &) noexcept;
451 friend inline bool operator >=(const cinterval &,const real &) noexcept;
452
453 // CI-I
454
456 friend inline bool operator <(const interval &,const cinterval &) noexcept;
458 friend inline bool operator >(const interval &,const cinterval &) noexcept;
460 friend inline bool operator <=(const interval &,const cinterval &) noexcept;
462 friend inline bool operator >=(const interval &,const cinterval &) noexcept;
463
465 friend inline bool operator <(const cinterval &,const interval &) noexcept;
467 friend inline bool operator >(const cinterval &,const interval &) noexcept;
469 friend inline bool operator <=(const cinterval &,const interval &) noexcept;
471 friend inline bool operator >=(const cinterval &,const interval &) noexcept;
472
473 // CI-C
474
476 friend inline bool operator <(const complex &,const cinterval &) noexcept;
478 friend inline bool operator >(const complex &,const cinterval &) noexcept;
480 friend inline bool operator <=(const complex &,const cinterval &) noexcept;
482 friend inline bool operator >=(const complex &,const cinterval &) noexcept;
483
485 friend inline bool operator <(const cinterval &,const complex &) noexcept;
487 friend inline bool operator >(const cinterval &,const complex &) noexcept;
489 friend inline bool operator <=(const cinterval &,const complex &) noexcept;
491 friend inline bool operator >=(const cinterval &,const complex &) noexcept;
492
493 // ---- Others -------------------------------------------
495 friend inline complex Inf(const cinterval &) noexcept;
497 friend inline complex Sup(const cinterval &) noexcept;
498
500 friend inline cinterval & SetInf(cinterval &,const complex &);
502 friend inline cinterval & SetInf(cinterval &,const real &);
504 friend inline cinterval & SetSup(cinterval &,const complex &);
506 friend inline cinterval & SetSup(cinterval &,const real &);
508 friend inline cinterval & UncheckedSetInf(cinterval &,const complex &) noexcept;
510 friend inline cinterval & UncheckedSetInf(cinterval &,const real &) noexcept;
512 friend inline cinterval & UncheckedSetSup(cinterval &,const complex &) noexcept;
514 friend inline cinterval & UncheckedSetSup(cinterval &,const real &) noexcept;
515
517 friend inline interval & Re(cinterval & a) noexcept;
519 friend inline interval Re(const cinterval & a) noexcept;
521 friend inline interval & Im(cinterval & a) noexcept;
523 friend inline interval Im(const cinterval & a) noexcept;
524
526 friend inline cinterval & SetRe(cinterval & a,const interval & b);
528 friend inline cinterval & SetIm(cinterval & a,const interval & b);
530 friend inline cinterval & SetRe(cinterval & a,const real & b);
532 friend inline cinterval & SetIm(cinterval & a,const real & b);
533
535 friend inline real InfRe(const cinterval &a) noexcept;
537 friend inline real InfIm(const cinterval &a) noexcept;
539 friend inline real SupRe(const cinterval &a) noexcept;
541 friend inline real SupIm(const cinterval &a) noexcept;
542
544 friend inline real & InfRe(cinterval &a) noexcept;
546 friend inline real & InfIm(cinterval &a) noexcept;
548 friend inline real & SupRe(cinterval &a) noexcept;
550 friend inline real & SupIm(cinterval &a) noexcept;
551
553 friend interval abs(const cinterval &) noexcept;
555 friend inline cinterval conj(const cinterval &) noexcept;
557 friend inline complex mid(const cinterval &) noexcept;
559 friend inline complex diam(const cinterval &) noexcept;
560};
561
563extern int in ( const cinterval&, const cinterval& );
565extern cinterval Blow ( cinterval, const real& );
566
567// Additional declaration of friend functions outside class cinterval
568interval abs(const cinterval &) noexcept;
569
570} // namespace cxsc
571
572#include "cinterval.inl"
573#include "cimath.hpp"
574
575#endif // _CXSC_CINTERVAL_HPP_INCLUDED
576
The Data Type cdotprecision.
Definition cdot.hpp:61
The Data Type cidotprecision.
Definition cidot.hpp:58
The Data Type cimatrix_slice.
The Data Type cimatrix.
Definition cimatrix.hpp:908
The Scalar Type cinterval.
Definition cinterval.hpp:55
friend bool operator>(const cinterval &, const cinterval &) noexcept
Implementation of standard greater-than operation.
friend complex mid(const cinterval &) noexcept
Returns the rounded middle of the complex interval.
friend cinterval & UncheckedSetInf(cinterval &, const complex &) noexcept
Returns the complex interval with the unchecked new given infimum value.
friend cinterval & SetRe(cinterval &a, const interval &b)
Sets the real interval of the complex interval.
friend bool operator<(const cinterval &, const cinterval &) noexcept
Implementation of standard less-than operation.
friend complex Sup(const cinterval &) noexcept
Returns the supremum of a complex interval.
friend std::ostream & operator<<(std::ostream &, const cinterval &) noexcept
Implementation of standard output method.
cinterval(void) noexcept
Constructor of class cinterval.
Definition cinterval.hpp:64
friend bool operator>=(const cinterval &, const cinterval &) noexcept
Implementation of standard more-or-equal-than operation.
friend bool operator!=(const cinterval &a, const cinterval &b) noexcept
Implementation of standard negated equality operation.
friend std::istream & operator>>(std::istream &, cinterval &)
Implementation of standard input method.
friend cinterval operator&(const cinterval &, const cinterval &)
Returns the intersection of the arguments.
friend bool operator!(const cinterval &a) noexcept
Implementation of standard negation operation.
friend real SupRe(const cinterval &a) noexcept
Returns the supremum of the real interval of the complex interval.
friend real InfRe(const cinterval &a) noexcept
Returns the infimum of the real interval of the complex interval.
friend complex diam(const cinterval &) noexcept
Returns the rounded diameter of the complex interval.
friend cinterval & UncheckedSetSup(cinterval &, const complex &) noexcept
Returns the complex interval with the unchecked new given supremum value.
friend cinterval & operator+=(cinterval &, const cinterval &) noexcept
Implementation of standard algebraic addition and allocation operation.
friend cinterval & operator*=(cinterval &, const cinterval &) noexcept
Implementation of standard algebraic multiplication and allocation operation.
friend cinterval & SetInf(cinterval &, const complex &)
Returns the complex interval with the new given infimum value.
friend cinterval operator/(const cinterval &, const cinterval &)
Implementation of standard algebraic division operation.
friend interval & Re(cinterval &a) noexcept
Returns the real interval of the complex interval.
friend cinterval operator|(const cinterval &, const cinterval &) noexcept
Returns the convex hull of the arguments.
friend cinterval _unchecked_cinterval(const complex &, const complex &) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend cinterval operator*(const cinterval &, const cinterval &) noexcept
Implementation of standard algebraic multiplication operation.
friend cinterval & operator|=(cinterval &, const cinterval &) noexcept
Allocates the convex hull of the arguments to the first argument.
friend real SupIm(const cinterval &a) noexcept
Returns the supremum of the imaginary interval of the complex interval.
friend cinterval & operator-=(cinterval &, const cinterval &) noexcept
Implementation of standard algebraic subtraction and allocation operation.
friend cinterval _cinterval(const real &) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend bool operator<=(const cinterval &, const cinterval &) noexcept
Implementation of standard less-or-equal-than operation.
friend cinterval & operator&=(cinterval &, const cinterval &)
Allocates the intersection of the arguments to the first argument.
friend interval & Im(cinterval &a) noexcept
Returns the imaginary interval of the complex interval.
friend cinterval & SetIm(cinterval &a, const interval &b)
Sets the imaginary interval of the complex interval.
friend complex Inf(const cinterval &) noexcept
Returns the infimum of a complex interval.
cinterval(const cimatrix_slice &) noexcept
Constructor of class cinterval.
friend cinterval & operator/=(cinterval &, const cinterval &) noexcept
Implementation of standard algebraic division and allocation operation.
friend cinterval operator-(const cinterval &) noexcept
Implementation of standard algebraic negative sign operation.
cinterval & operator=(const real &) noexcept
Implementation of standard assigning operator.
Definition cinterval.inl:53
friend interval abs(const cinterval &) noexcept
Returns the absolute value of a complex interval.
friend cinterval operator+(const cinterval &) noexcept
Implementation of standard algebraic positive sign operation.
friend real InfIm(const cinterval &a) noexcept
Returns the infimum of the imaginary interval of the complex interval.
friend cinterval & SetSup(cinterval &, const complex &)
Returns the complex interval with the new given supremum value.
friend cinterval conj(const cinterval &) noexcept
Returns the conjugated complex interval.
friend bool operator==(const cinterval &a, const cinterval &b) noexcept
Implementation of standard equality operation.
The Data Type civector_slice.
The Data Type civector.
Definition civector.hpp:57
The Scalar Type complex.
Definition complex.hpp:50
The Data Type dotprecision.
Definition dot.hpp:112
The Data Type idotprecision.
Definition idot.hpp:48
The Scalar Type interval.
Definition interval.hpp:55
The Multiple-Precision Data Type l_cinterval.
The Scalar Type real.
Definition real.hpp:114
The namespace cxsc, providing all functionality of the class library C-XSC.
Definition cdot.cpp:29
int in(const cinterval &x, const cinterval &y)
Checks if first argument is part of second argument.
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.
Definition cimatrix.inl:737
cinterval Blow(cinterval x, const real &eps)
Performs an epsilon inflation.