C-XSC - A C++ Class Library for Extended Scientific Computing 2.5.4
interval.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: interval.hpp,v 1.48 2014/01/30 18:13:52 cxsc Exp $ */
25
26#ifndef _CXSC_INTERVAL_H_INCLUDED
27#define _CXSC_INTERVAL_H_INCLUDED
28
29#include <iostream>
30#include <string>
31#include "real.hpp"
32#include "except.hpp"
33
34namespace cxsc {
35
36class ivector;
37class ivector_slice;
38class imatrix;
39class imatrix_slice;
40
41
43
55{
56 private:
57 // ---- Datenelemente ---------------------------------------
58 real inf;
59 real sup;
60
61 public:
62 // ---- Konstruktoren ---------------------------------------
66 inline interval(const real&, const real&);
68 inline interval& operator= (const real& a);
69
70 // ---- Typecasts ---------------------------------------
71
73 explicit inline interval(const real &r) noexcept :inf(r),sup(r) { }
74
76 friend inline interval _unchecked_interval(const real&, const real&);
77
78#if(CXSC_INDEX_CHECK)
80 explicit INLINE interval(const ivector &);
82 explicit INLINE interval(const ivector_slice &);
84 explicit INLINE interval(const imatrix &m);
86 explicit INLINE interval(const imatrix_slice &m);
88 friend INLINE interval _interval(const ivector &);
90 friend INLINE interval _interval(const ivector_slice &);
92 friend INLINE interval _interval(const imatrix &m);
94 friend INLINE interval _interval(const imatrix_slice &m);
95#else
97 explicit INLINE interval(const ivector &) noexcept;
99 explicit INLINE interval(const ivector_slice &) noexcept;
101 explicit INLINE interval(const imatrix &m) noexcept;
103 explicit INLINE interval(const imatrix_slice &m) noexcept;
105 friend INLINE interval _interval(const ivector &) noexcept;
107 friend INLINE interval _interval(const ivector_slice &) noexcept;
109 friend INLINE interval _interval(const imatrix &m) noexcept;
111 friend INLINE interval _interval(const imatrix_slice &m) noexcept;
112#endif
114 explicit interval(const l_real &) noexcept; // in l_real.cpp
116 interval(const l_real &,const l_real &);
118 explicit interval(const l_interval &) noexcept; // in l_interval.cpp
120 explicit interval(const dotprecision &) noexcept;
122 interval(const dotprecision &,const dotprecision &);
124 explicit interval(const idotprecision &) noexcept;
125
127 friend inline interval _interval(const l_real &a) noexcept; // in l_interval.inl
129 friend inline interval _interval(const l_real &a,const l_real &b) { return interval(a,b); }
131 friend interval _interval(const l_interval &a) noexcept; // in l_interv.inl
132// friend inline interval _interval(const dotprecision &a) noexcept { return interval(a); }
133// friend inline interval _interval(const dotprecision &a,const dotprecision &b) { return interval(a,b); }
134// friend inline interval _interval(const idotprecision &a) noexcept { return interval(a); }
135
136 // interval & operator= (const interval& a); Default passt
138 interval & operator =(const l_real &) noexcept;
140 interval & operator =(const l_interval &) noexcept;
142 interval & operator = (const lx_interval &) noexcept;
144 interval & operator =(const dotprecision &) noexcept;
146 interval & operator =(const idotprecision &) noexcept;
147
148 // ---- Destruktor ----
149 // ~interval() {} unnoetig
150
151 // ---- Typwandlungen ----
152
153 // ---- Ausgabefunkt. ---------------------------------------
155 friend std::istream& operator >> (std::istream &, interval &) noexcept;
157 friend std::ostream& operator << (std::ostream &, const interval &) noexcept;
159 friend std::string & operator >> (std::string &, interval &) noexcept;
161 friend std::string & operator << (std::string &, const interval &) noexcept;
163 friend void operator >> (const std::string&,interval &) noexcept;
165 friend void operator >> (const char *,interval &) noexcept;
166
167 // ---- Standardfunkt ---- (arithmetische Operatoren)
169 friend inline interval operator -(const interval &) noexcept;
171 friend inline interval operator +(const interval &) noexcept;
172
174 friend inline interval operator +(const interval &,const interval &) noexcept;
176 friend inline interval operator -(const interval &,const interval &) noexcept;
178 friend inline interval operator *(const interval &,const interval &) noexcept;
180 friend inline interval operator /(const interval &,const interval &);
182 friend inline interval operator |(const interval &,const interval &) noexcept;
184 friend inline interval operator &(const interval &,const interval &);
185
187 friend inline interval operator +(const interval &,const real &) noexcept;
189 friend inline interval operator +(const real &,const interval &) noexcept;
191 friend inline interval operator -(const interval &,const real &) noexcept;
193 friend inline interval operator -(const real &,const interval &) noexcept;
195 friend inline interval operator *(const interval &,const real &) noexcept;
197 friend inline interval operator *(const real &,const interval &) noexcept;
199 friend inline interval operator /(const interval &,const real &) noexcept;
201 friend inline interval operator /(const real &,const interval &) noexcept;
203 friend inline interval operator |(const real &,const interval &) noexcept;
205 friend inline interval operator |(const interval &,const real &) noexcept;
207 friend inline interval operator |(const real &,const real &) noexcept;
209 friend inline interval operator &(const real &,const interval &);
211 friend inline interval operator &(const interval &,const real &);
212
213
215 friend inline idotprecision operator +(const idotprecision &,const interval &) noexcept;
217 friend inline idotprecision operator +(const interval &,const idotprecision &) noexcept;
219 friend inline idotprecision operator -(const idotprecision &,const interval &) noexcept;
221 friend inline idotprecision operator -(const interval &,const idotprecision &) noexcept;
223 friend inline idotprecision operator |(const interval &,const idotprecision &) noexcept;
225 friend inline idotprecision operator |(const idotprecision &,const interval &) noexcept;
227 friend inline idotprecision operator &(const interval &,const idotprecision &);
229 friend inline idotprecision operator &(const idotprecision &,const interval &);
230
232 friend inline interval & operator +=(interval &,const interval &) noexcept;
234 friend inline interval & operator -=(interval &,const interval &) noexcept;
236 friend inline interval & operator *=(interval &,const interval &) noexcept;
238 friend inline interval & operator /=(interval &,const interval &) noexcept;
240 friend inline interval & operator |=(interval &,const interval &) noexcept;
242 friend inline interval & operator &=(interval &,const interval &);
243
245 friend inline interval & operator +=(interval &,const real &) noexcept;
247 friend inline interval & operator -=(interval &,const real &) noexcept;
249 friend inline interval & operator *=(interval &,const real &) noexcept;
251 friend inline interval & operator /=(interval &,const real &) noexcept;
253 friend inline interval & operator |=(interval &,const real &) noexcept;
255 friend inline interval & operator &=(interval &,const real &);
256
257 // ---- Vergleichsop. ----
258
260 friend inline bool operator ==(const interval &,const interval &) noexcept;
262 friend inline bool operator !=(const interval &,const interval &) noexcept;
263
265 friend inline bool operator !(const interval &) noexcept;
266// inline operator void*(void) const noexcept { return (void*)(!(!*this)); }
267
269 friend inline bool operator ==(const real &,const interval &) noexcept;
271 friend inline bool operator !=(const real &,const interval &) noexcept;
272
274 friend inline bool operator ==(const interval &,const real &) noexcept;
276 friend inline bool operator !=(const interval &,const real &) noexcept;
277
279 friend bool operator ==(const dotprecision &,const interval &) noexcept;
281 friend bool operator !=(const dotprecision &,const interval &) noexcept;
282
284 friend bool operator ==(const interval &,const dotprecision &) noexcept;
286 friend bool operator !=(const interval &,const dotprecision &) noexcept;
287
289 friend inline bool operator ==(const int &,const interval &) noexcept;
291 friend inline bool operator !=(const int &,const interval &) noexcept;
292
294 friend inline bool operator ==(const interval &,const int &) noexcept;
296 friend inline bool operator !=(const interval &,const int &) noexcept;
297
299 friend inline bool operator ==(const long &,const interval &) noexcept;
301 friend inline bool operator !=(const long &,const interval &) noexcept;
302
304 friend inline bool operator ==(const interval &,const long &) noexcept;
306 friend inline bool operator !=(const interval &,const long &) noexcept;
307
309 friend inline bool operator ==(const double &,const interval &) noexcept;
311 friend inline bool operator !=(const double &,const interval &) noexcept;
312
314 friend inline bool operator ==(const interval &,const double &) noexcept;
316 friend inline bool operator !=(const interval &,const double &) noexcept;
317
318 // ---- Mengenvergle. ----
319
321 friend inline bool operator <(const interval &,const interval &) noexcept;
323 friend inline bool operator >(const interval &,const interval &) noexcept;
325 friend inline bool operator <=(const interval &,const interval &) noexcept;
327 friend inline bool operator >=(const interval &,const interval &) noexcept;
328
330 friend inline bool operator <(const real &,const interval &) noexcept;
332 friend inline bool operator >(const real &,const interval &) noexcept { return false; }
334 friend inline bool operator <=(const real &,const interval &) noexcept;
336 friend inline bool operator >=(const real &,const interval &) noexcept;
337
339 friend inline bool operator <(const interval &,const real &) noexcept { return false; }
341 friend inline bool operator >(const interval &,const real &) noexcept;
343 friend inline bool operator <=(const interval &,const real &) noexcept;
345 friend inline bool operator >=(const interval &,const real &) noexcept;
346
348 friend bool operator <(const dotprecision &,const interval &) noexcept;
350 friend bool operator >(const dotprecision &,const interval &) noexcept { return false; }
352 friend bool operator <=(const dotprecision &,const interval &) noexcept;
354 friend bool operator >=(const dotprecision &,const interval &) noexcept;
355
357 friend bool operator <(const interval &,const dotprecision &) noexcept { return false; }
359 friend bool operator >(const interval &,const dotprecision &) noexcept;
361 friend bool operator <=(const interval &,const dotprecision &) noexcept;
363 friend bool operator >=(const interval &,const dotprecision &) noexcept;
364
365 // ---- Funktionen ----
366
368 friend inline real & Inf (interval &) noexcept;
370 friend inline const real & Inf (const interval &) noexcept;
372 friend inline real & Sup (interval &) noexcept;
374 friend inline const real & Sup (const interval &) noexcept;
375
377 friend inline interval& SetInf (interval &, const real &) noexcept;
379 friend inline interval& SetSup (interval &, const real &) noexcept;
381 friend inline interval& UncheckedSetInf (interval &, const real &) noexcept;
383 friend inline interval& UncheckedSetSup (interval &, const real &) noexcept;
384
386 friend inline bool IsEmpty (const interval &) noexcept;
387
389 friend inline interval abs (const interval &) noexcept;
391 friend real mid (const interval &) noexcept;
392 // Returns the rounded middle of the interval (faster version for tests)
393 friend real Mid (const interval &) noexcept;
395 friend inline real diam (const interval &) noexcept;
397 friend inline void times2pown(interval &, const int&) noexcept; // Blomquist, 28.11.02
398};
399
405inline interval _interval(const real & r) noexcept { return interval(r); }
411inline interval _interval(const real & a, const real & b) { return interval(a,b); }
417inline interval _interval(const dotprecision &a) noexcept { return interval(a); }
423inline interval _interval(const dotprecision &a,const dotprecision &b) { return interval(a,b); }
429inline interval _interval(const idotprecision &a) noexcept { return interval(a); }
430
431// for compatibility with CToolbox library - from former i_util.hpp
433extern int in ( const real&, const interval& );
435extern int in ( const interval&, const interval& );
436//extern void rnd ( const dotprecision&, interval& );
438extern interval Blow ( const interval&, const real& );
440extern int Disjoint ( const interval&, const interval& );
442extern real AbsMin ( const interval& );
444extern real AbsMax ( const interval& );
446extern real RelDiam ( const interval& );
448extern int UlpAcc ( const interval&, int );
449
450// Additional declaration of friend functions outside class interval
451real mid (const interval& a) noexcept;
452
453// Interval constants, optimal inclusions:
455extern const interval Pi_interval; // Pi
457extern const interval Pi2_interval; // 2*Pi
459extern const interval Pi3_interval; // 3*Pi
461extern const interval Pid2_interval; // Pi/2
463extern const interval Pid3_interval; // Pi/3
465extern const interval Pid4_interval; // Pi/4
467extern const interval Pir_interval; // 1/Pi
469extern const interval Pi2r_interval; // 1/(2*Pi)
471extern const interval Pip2_interval; // Pi^2
473extern const interval SqrtPi_interval; // sqrt(Pi)
475extern const interval Sqrt2Pi_interval; // sqrt(2Pi)
477extern const interval SqrtPir_interval; // 1/sqrt(Pi)
479extern const interval Sqrt2Pir_interval; // 1/sqrt(2Pi)
481extern const interval Sqrt2_interval; // sqrt(2)
483extern const interval Sqrt5_interval; // sqrt(5)
485extern const interval Sqrt7_interval; // sqrt(7)
487extern const interval Sqrt2r_interval; // 1/sqrt(2)
489extern const interval Sqrt3_interval; // sqrt(3)
491extern const interval Sqrt3d2_interval; // sqrt(3)/2
493extern const interval Sqrt3r_interval; // 1/sqrt(3)
495extern const interval Ln2_interval; // ln(2)
497extern const interval Ln2r_interval; // 1/ln(2)
499extern const interval Ln10_interval; // ln(10)
501extern const interval Ln10r_interval; // 1/ln(10)
503extern const interval LnPi_interval; // ln(Pi)
505extern const interval Ln2Pi_interval; // ln(2Pi)
507extern const interval E_interval; // e
509extern const interval Er_interval; // 1/e
511extern const interval Ep2_interval; // e^2
513extern const interval Ep2r_interval; // 1/e^2
515extern const interval EpPi_interval; // e^(Pi)
517extern const interval Ep2Pi_interval; // e^(2Pi)
519extern const interval EpPid2_interval; // e^(Pi/2)
521extern const interval EpPid4_interval; // e^(Pi/4)
522
523
524} // namespace cxsc
525
526#include "interval.inl"
527#include "imath.hpp"
528
529#endif // _CXSC_INTERVAL_H_INCLUDED
The Data Type dotprecision.
Definition dot.hpp:112
The Data Type idotprecision.
Definition idot.hpp:48
The Data Type imatrix_slice.
Definition imatrix.hpp:1442
The Data Type imatrix.
Definition imatrix.hpp:660
The Scalar Type interval.
Definition interval.hpp:55
friend std::ostream & operator<<(std::ostream &, const interval &) noexcept
Implementation of standard output method.
Definition interval.cpp:137
interval & operator=(const real &a)
Implementation of standard assigning operator.
Definition interval.inl:52
friend interval operator|(const interval &, const interval &) noexcept
Returns the convex hull of the arguments.
Definition interval.inl:90
friend std::istream & operator>>(std::istream &, interval &) noexcept
Implementation of standard input method.
Definition interval.cpp:157
friend bool operator<=(const interval &, const interval &) noexcept
Implementation of standard less-or-equal-than operation.
Definition interval.inl:169
interval(const imatrix_slice &m) noexcept
Constructor of class interval.
friend real & Sup(interval &) noexcept
Returns the supremum of an interval.
Definition interval.inl:216
interval()
Constructor of class interval.
Definition interval.hpp:64
friend interval & UncheckedSetInf(interval &, const real &) noexcept
Returns the interval with the unchecked new given infimum value.
Definition interval.inl:221
friend void times2pown(interval &, const int &) noexcept
Multiplication of interval with .
Definition interval.inl:250
friend interval operator+(const interval &) noexcept
Implementation of standard algebraic positive sign operation.
Definition interval.inl:78
friend interval _interval(const ivector_slice &) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend interval & operator-=(interval &, const interval &) noexcept
Implementation of standard algebraic subtraction and allocation operation.
Definition interval.inl:82
friend bool operator==(const interval &, const interval &) noexcept
Implementation of standard equality operation.
Definition interval.inl:145
friend interval _interval(const ivector &) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend interval & SetInf(interval &, const real &) noexcept
Returns the interval with the new given infimum value.
Definition interval.inl:219
friend interval & UncheckedSetSup(interval &, const real &) noexcept
Returns the interval with the unchecked new given supremum value.
Definition interval.inl:222
friend real mid(const interval &) noexcept
Returns the rounded middle of the interval.
Definition interval.cpp:216
friend interval operator*(const interval &, const interval &) noexcept
Implementation of standard algebraic multiplication operation.
Definition interval.inl:311
friend bool operator>(const interval &, const interval &) noexcept
Implementation of standard greater-than operation.
Definition interval.inl:181
friend interval & operator|=(interval &, const interval &) noexcept
Allocates the convex hull of the arguments to the first argument.
Definition interval.inl:119
friend interval _interval(const imatrix &m) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend interval operator/(const interval &, const interval &)
Implementation of standard algebraic division operation.
Definition interval.inl:387
friend bool operator!(const interval &) noexcept
Implementation of standard negation operation.
Definition interval.inl:212
friend interval _unchecked_interval(const real &, const real &)
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
Definition interval.inl:66
friend interval operator-(const interval &) noexcept
Implementation of standard algebraic negative sign operation.
Definition interval.inl:77
friend bool operator>=(const interval &, const interval &) noexcept
Implementation of standard greater-or-equal-than operation.
Definition interval.inl:173
friend interval abs(const interval &) noexcept
Returns the absolute value of the interval.
Definition interval.inl:226
friend interval & operator*=(interval &, const interval &) noexcept
Implementation of standard algebraic multiplication and allocation operation.
Definition interval.inl:84
friend real diam(const interval &) noexcept
Returns the rounded diameter of the interval.
Definition interval.inl:240
friend interval & operator&=(interval &, const interval &)
Allocates the intersection of the arguments to the first argument.
Definition interval.inl:124
friend interval _interval(const l_real &a, const l_real &b)
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
Definition interval.hpp:129
friend interval & SetSup(interval &, const real &) noexcept
Returns the interval with the new given supremum value.
Definition interval.inl:220
interval(const real &r) noexcept
Typecast for converting a real value in an interval.
Definition interval.hpp:73
friend interval _interval(const imatrix_slice &m) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
friend bool operator<(const interval &, const interval &) noexcept
Implementation of standard less-than operation.
Definition interval.inl:177
friend bool IsEmpty(const interval &) noexcept
Returns true if the interval is empty.
Definition interval.inl:224
friend interval & operator+=(interval &, const interval &) noexcept
Implementation of standard algebraic addition and allocation operation.
Definition interval.inl:80
friend interval & operator/=(interval &, const interval &) noexcept
Implementation of standard algebraic division and allocation operation.
Definition interval.inl:86
friend real & Inf(interval &) noexcept
Returns the infimum of an interval.
Definition interval.inl:214
friend bool operator!=(const interval &, const interval &) noexcept
Implementation of standard negated equality operation.
Definition interval.inl:146
friend interval operator&(const interval &, const interval &)
Returns the intersection of the arguments.
Definition interval.inl:94
The Data Type ivector_slice.
Definition ivector.hpp:963
The Data Type ivector.
Definition ivector.hpp:55
The Multiple-Precision Data Type l_interval.
The Multiple-Precision Data Type l_real.
Definition l_real.hpp:78
The Scalar Type real.
Definition real.hpp:114
The namespace cxsc, providing all functionality of the class library C-XSC.
Definition cdot.cpp:29
const interval Sqrt2Pi_interval
Enclosure-Interval for .
Definition interval.cpp:380
const interval EpPi_interval
Enclosure-Interval for .
Definition interval.cpp:452
const interval Sqrt5_interval
Enclosure-Interval for .
Definition interval.cpp:396
const interval Er_interval
Enclosure-Interval for .
Definition interval.cpp:443
const interval Sqrt3d2_interval
Enclosure-Interval for .
Definition interval.cpp:412
const interval Pid4_interval
Enclosure-Interval for .
Definition interval.cpp:363
const interval Pi2r_interval
Enclosure-Interval for .
Definition interval.cpp:369
const interval Sqrt2_interval
Enclosure-Interval for .
Definition interval.cpp:392
const interval Ln2Pi_interval
Enclosure-Interval for .
Definition interval.cpp:436
const interval Sqrt3r_interval
Enclosure-Interval for .
Definition interval.cpp:416
const interval Ln2r_interval
Enclosure-Interval for .
Definition interval.cpp:423
const interval EpPid4_interval
Enclosure-Interval for .
Definition interval.cpp:463
int Disjoint(const interval &a, const interval &b)
Checks arguments for disjointness.
Definition interval.cpp:288
const interval E_interval
Enclosure-Interval for .
Definition interval.cpp:440
const interval LnPi_interval
Enclosure-Interval for .
Definition interval.cpp:433
const interval Pid2_interval
Enclosure-Interval for .
Definition interval.cpp:357
int UlpAcc(const interval &x, int n)
Checks if the diameter of the interval is ulps.
Definition interval.cpp:335
const interval Ep2_interval
Enclosure-Interval for .
Definition interval.cpp:446
real RelDiam(const interval &x)
Computes the relative diameter .
Definition interval.cpp:316
const interval Sqrt7_interval
Enclosure-Interval for .
Definition interval.cpp:400
int in(const cinterval &x, const cinterval &y)
Checks if first argument is part of second argument.
const interval Pir_interval
Enclosure-Interval for .
Definition interval.cpp:366
const interval Pip2_interval
Enclosure-Interval for .
Definition interval.cpp:373
const interval Ln2_interval
Enclosure-Interval for .
Definition interval.cpp:420
const interval Pid3_interval
Enclosure-Interval for .
Definition interval.cpp:360
const interval SqrtPir_interval
Enclosure-Interval for .
Definition interval.cpp:384
const interval Sqrt2r_interval
Enclosure-Interval for .
Definition interval.cpp:404
const interval Pi2_interval
Enclosure-Interval for .
Definition interval.cpp:351
const interval Ep2Pi_interval
Enclosure-Interval for .
Definition interval.cpp:455
const interval Ln10_interval
Enclosure-Interval for .
Definition interval.cpp:426
const interval Ep2r_interval
Enclosure-Interval for .
Definition interval.cpp:449
real AbsMax(const interval &x)
Computes the greatest absolute value .
Definition interval.cpp:303
const interval Ln10r_interval
Enclosure-Interval for .
Definition interval.cpp:429
cvector mid(const cimatrix_subv &mv) noexcept
Returns the middle of the matrix.
Definition cimatrix.inl:739
const interval EpPid2_interval
Enclosure-Interval for .
Definition interval.cpp:459
const interval Sqrt3_interval
Enclosure-Interval for .
Definition interval.cpp:408
const interval Sqrt2Pir_interval
Enclosure-Interval for .
Definition interval.cpp:388
const interval Pi3_interval
Enclosure-Interval for .
Definition interval.cpp:354
const interval SqrtPi_interval
Enclosure-Interval for .
Definition interval.cpp:376
cinterval Blow(cinterval x, const real &eps)
Performs an epsilon inflation.
const interval Pi_interval
Enclosure-Interval for .
Definition interval.cpp:348
real AbsMin(const interval &x)
Computes the smallest absolute value .
Definition interval.cpp:293