39 #ifndef _CXSC_LX_INTERVAL_HPP_INCLUDED
40 #define _CXSC_LX_INTERVAL_HPP_INCLUDED
42 #include <l_imath.hpp>
43 #include <lx_real.hpp>
63 lx_interval(
void)
throw() {}
66 lx_interval(
const real& n,
const l_interval& a)
throw()
69 cxscthrow(REAL_NOT_ALLOWED(
"lx_interval(const real&, const l_interval&)"));
77 lx_interval(
const real& n,
const l_real& a)
throw()
80 cxscthrow(REAL_NOT_ALLOWED(
"lx_interval(const real& n, const l_real& a)"));
88 lx_interval(
const real& n,
const interval& a)
throw()
91 cxscthrow(REAL_NOT_ALLOWED(
"lx_interval(const real&, const interval&)"));
99 explicit lx_interval(
const real& n,
const real& a)
throw()
102 cxscthrow(REAL_NOT_ALLOWED(
"lx_interval(const real&, const real&)"));
109 explicit lx_interval(
const l_interval& a)
throw() : ex(0), li(a) { }
111 explicit lx_interval(
const l_real& a)
throw() : ex(0), li(a) { }
113 lx_interval(
const l_real& a,
const l_real& b)
throw() : ex(0),li(a,b) { }
115 explicit lx_interval(
const interval& a)
throw() : ex(0), li(a) { }
117 explicit lx_interval(
const real& a)
throw() : ex(0), li(a) { }
119 lx_interval(
const lx_real&,
const lx_real&)
throw();
121 explicit lx_interval(
const lx_real& a)
122 throw() : ex(expo(a)), li(lr_part(a)) { }
124 lx_interval(
const real&,
const string&)
throw();
129 inline lx_interval & operator = (
const lx_interval & a)
throw();
131 inline lx_interval & operator = (
const l_interval & a)
throw();
133 inline lx_interval & operator = (
const l_real & a)
throw();
135 inline lx_interval & operator = (
const real & a)
throw();
137 inline lx_interval & operator = (
const interval & a)
throw();
139 inline lx_interval & operator = (
const lx_real & a)
throw();
150 friend inline int StagPrec(
const lx_interval&)
throw();
152 friend inline real expo(
const lx_interval&)
throw();
154 friend inline l_interval li_part(
const lx_interval&)
throw();
156 friend void scale_down(lx_interval &a);
158 friend void scale_up (lx_interval &a);
161 friend inline lx_interval adjust(
const lx_interval &)
throw();
163 friend inline lx_interval
abs(
const lx_interval &)
throw();
165 friend inline bool point_intv(
const lx_interval &);
167 friend inline bool operator ! (
const lx_interval &)
throw();
169 friend inline bool IsEmpty(
const lx_interval &)
throw();
171 friend inline void times2pown(lx_interval &,
const real &)
throw();
173 friend inline lx_interval
Blow(
const lx_interval &)
throw();
175 friend inline void times2pown_neg(lx_interval &,
const real&)
throw();
177 friend inline lx_real
RelDiam(
const lx_interval &);
179 friend inline lx_real
diam(
const lx_interval &)
throw();
181 friend inline lx_real
mid(
const lx_interval &)
throw();
183 friend inline lx_real Inf(
const lx_interval &)
throw();
185 friend inline lx_real Sup(
const lx_interval &)
throw();
190 friend inline lx_interval operator-(
const lx_interval & a)
throw();
196 friend std::ostream& operator << (std::ostream&,
const lx_interval&)
200 friend std::string & operator << (std::string&,
const lx_interval&)
210 inline int StagPrec(
const lx_interval &a)
throw();
211 inline real expo(
const lx_interval &a)
throw();
212 inline l_interval li_part(
const lx_interval &a)
throw();
214 void scale_down(lx_interval &);
215 void scale_up (lx_interval &);
216 inline bool point_intv(
const lx_interval &);
217 inline bool IsEmpty(
const lx_interval &)
throw();
218 inline void times2pown(lx_interval &,
const real &)
throw();
219 inline lx_interval
Blow(
const lx_interval &)
throw();
220 inline void times2pown_neg(lx_interval &,
const real&)
throw();
221 inline lx_real
RelDiam(
const lx_interval &);
222 inline lx_real Inf(
const lx_interval &)
throw();
223 inline lx_real Sup(
const lx_interval &)
throw();
224 inline lx_interval
abs(
const lx_interval &)
throw();
225 inline lx_interval adjust(
const lx_interval &)
throw();
226 inline lx_real
diam(
const lx_interval &)
throw();
227 inline lx_real
mid(
const lx_interval &)
throw();
232 std::string & operator >> (std::string &s, lx_interval &a)
throw();
234 void operator >> (
const std::string &s, lx_interval &a)
throw();
236 void operator >> (
const char *s, lx_interval&)
throw();
239 std::istream & operator >> (std::istream&, lx_interval&)
throw();
243 std::ostream& operator << (std::ostream& s,
const lx_interval& a)
throw();
248 std::string & operator << (std::string &s,
const lx_interval& a)
throw();
257 void Bin2Dec(
const lx_interval& a, real& p, l_interval& m);
260 lx_interval
expo2zero(
const lx_interval &)
throw(OVERFLOW_ERROR);
262 inline int Disjoint(
const lx_interval &,
const lx_interval &);
264 inline int in (
const lx_interval&,
const lx_interval&);
266 inline int in (
const l_interval&,
const lx_interval&);
268 inline int in (
const interval&,
const lx_interval&);
271 inline int in (
const lx_real&,
const lx_interval&);
273 inline int in (
const l_real&,
const lx_interval&);
275 inline int in (
const real&,
const lx_interval&);
278 inline lx_interval
Blow(
const lx_interval&,
const real& );
280 inline lx_real
AbsMin (
const lx_interval&);
282 inline lx_real
AbsMax (
const lx_interval&);
291 inline bool operator < (
const lx_interval&,
const lx_interval&)
throw();
293 inline bool operator <= (
const lx_interval&,
const lx_interval&)
throw();
295 inline bool operator > (
const lx_interval&,
const lx_interval&)
throw();
297 inline bool operator >= (
const lx_interval&,
const lx_interval&)
throw();
302 inline bool operator < (
const lx_interval&,
const l_interval&)
throw();
304 inline bool operator <= (
const lx_interval&,
const l_interval&)
throw();
306 inline bool operator < (
const l_interval&,
const lx_interval&)
throw();
308 inline bool operator <= (
const l_interval&,
const lx_interval&)
throw();
310 inline bool operator > (
const lx_interval&,
const l_interval&)
throw();
311 inline bool operator >= (
const lx_interval&,
const l_interval&)
throw();
313 inline bool operator > (
const l_interval&,
const lx_interval&)
throw();
315 inline bool operator >= (
const l_interval&,
const lx_interval&)
throw();
320 inline bool operator < (
const lx_interval&,
const interval&)
throw();
322 inline bool operator <= (
const lx_interval&,
const interval&)
throw();
324 inline bool operator < (
const interval&,
const lx_interval&)
throw();
326 inline bool operator <= (
const interval&,
const lx_interval&)
throw();
328 inline bool operator > (
const lx_interval&,
const interval&)
throw();
330 inline bool operator >= (
const lx_interval&,
const interval&)
throw();
332 inline bool operator > (
const interval&,
const lx_interval&)
throw();
334 inline bool operator >= (
const interval&,
const lx_interval&)
throw();
339 inline bool operator < (
const real &,
const lx_interval &)
throw();
341 inline bool operator <= (
const real &,
const lx_interval &)
throw();
343 inline bool operator > (
const lx_interval &,
const real &)
throw();
345 inline bool operator >= (
const lx_interval &,
const real &)
throw();
350 inline bool operator < (
const l_real &,
const lx_interval &)
throw();
352 inline bool operator <= (
const l_real &,
const lx_interval &)
throw();
354 inline bool operator > (
const lx_interval &,
const l_real &)
throw();
356 inline bool operator >= (
const lx_interval &,
const l_real &)
throw();
361 inline bool operator < (
const lx_real &,
const lx_interval &)
throw();
363 inline bool operator <= (
const lx_real &,
const lx_interval &)
throw();
365 inline bool operator > (
const lx_interval &,
const lx_real &)
throw();
367 inline bool operator >= (
const lx_interval &,
const lx_real &)
throw();
373 inline bool operator ! (
const lx_interval &)
throw();
376 inline bool operator == (
const lx_interval &,
const lx_interval &)
throw();
378 inline bool operator == (
const lx_interval &,
const l_interval &)
throw();
380 inline bool operator == (
const l_interval &,
const lx_interval &)
throw();
382 inline bool operator == (
const lx_interval &,
const interval &)
throw();
384 inline bool operator == (
const interval &,
const lx_interval &)
throw();
386 inline bool operator == (
const lx_interval &,
const real &)
throw();
388 inline bool operator == (
const real &,
const lx_interval &)
throw();
390 inline bool operator == (
const lx_interval &,
const l_real &)
throw();
392 inline bool operator == (
const l_real &,
const lx_interval &)
throw();
394 inline bool operator == (
const lx_interval &,
const lx_real &)
throw();
396 inline bool operator == (
const lx_real &,
const lx_interval &)
throw();
399 inline bool operator != (
const lx_interval &,
const lx_interval &)
throw();
401 inline bool operator != (
const lx_interval &,
const l_interval &)
throw();
403 inline bool operator != (
const l_interval &,
const lx_interval &)
throw();
405 inline bool operator != (
const lx_interval &,
const interval &)
throw();
407 inline bool operator != (
const interval &,
const lx_interval &)
throw();
409 inline bool operator != (
const lx_interval &,
const real &)
throw();
411 inline bool operator != (
const real &,
const lx_interval &)
throw();
413 inline bool operator != (
const lx_interval &,
const l_real &)
throw();
415 inline bool operator != (
const l_real &,
const lx_interval &)
throw();
417 inline bool operator != (
const lx_interval &,
const lx_real &)
throw();
419 inline bool operator != (
const lx_real &,
const lx_interval &)
throw();
422 inline lx_interval operator+(
const lx_interval &)
throw();
424 inline lx_interval operator-(
const lx_interval &)
throw();
427 lx_interval operator + (
const lx_interval &,
const lx_interval &)
throw();
430 inline lx_interval operator + (
const lx_interval &,
const l_interval &)
433 inline lx_interval operator + (
const l_interval &,
const lx_interval &)
436 inline lx_interval operator + (
const lx_interval &,
const l_real &)
439 inline lx_interval operator + (
const l_real &,
const lx_interval &)
442 inline lx_interval operator + (
const lx_interval &,
const lx_real &)
445 inline lx_interval operator + (
const lx_real &,
const lx_interval &)
448 inline lx_interval operator + (
const lx_interval &,
const real &)
451 inline lx_interval operator + (
const real &,
const lx_interval &)
454 inline lx_interval operator + (
const lx_interval &,
const interval &)
457 inline lx_interval operator + (
const interval &,
const lx_interval &)
461 inline lx_interval &
operator +=(lx_interval &,
const lx_interval &)
throw();
463 inline lx_interval &
operator +=(lx_interval &,
const l_interval &)
throw();
465 inline lx_interval &
operator +=(lx_interval &,
const l_real &)
throw();
467 inline lx_interval &
operator +=(lx_interval &,
const lx_real &)
throw();
469 inline lx_interval &
operator +=(lx_interval &,
const real &)
throw();
471 inline lx_interval &
operator +=(lx_interval &,
const interval &)
throw();
474 inline lx_interval operator - (
const lx_interval &,
const lx_interval &)
477 inline lx_interval operator - (
const lx_interval &,
const l_interval &)
480 inline lx_interval operator - (
const l_interval &,
const lx_interval &)
483 inline lx_interval operator - (
const lx_interval &,
const l_real &)
486 inline lx_interval operator - (
const l_real &,
const lx_interval &)
489 inline lx_interval operator - (
const lx_interval &,
const lx_real &)
492 inline lx_interval operator - (
const lx_real &,
const lx_interval &)
495 inline lx_interval operator - (
const lx_interval &,
const real &)
498 inline lx_interval operator - (
const real &,
const lx_interval &)
501 inline lx_interval operator - (
const lx_interval &,
const interval &)
504 inline lx_interval operator - (
const interval &,
const lx_interval &)
508 inline lx_interval & operator -=(lx_interval &,
const lx_interval &)
throw();
510 inline lx_interval & operator -=(lx_interval &,
const l_interval &)
throw();
512 inline lx_interval & operator -=(lx_interval &,
const l_real &)
throw();
514 inline lx_interval & operator -=(lx_interval &,
const lx_real &)
throw();
516 inline lx_interval & operator -=(lx_interval &,
const real &)
throw();
518 inline lx_interval & operator -=(lx_interval &,
const interval &)
throw();
521 lx_interval
operator * (
const lx_interval &,
const lx_interval &)
525 inline lx_interval
operator * (
const lx_interval &,
const l_interval &)
528 inline lx_interval
operator * (
const l_interval &,
const lx_interval &)
531 inline lx_interval
operator * (
const lx_interval &,
const l_real &)
534 inline lx_interval
operator * (
const l_real &,
const lx_interval &)
537 inline lx_interval
operator * (
const lx_interval &,
const lx_real &)
540 inline lx_interval
operator * (
const lx_real &,
const lx_interval &)
543 inline lx_interval
operator * (
const lx_interval &,
const real &)
546 inline lx_interval
operator * (
const real &,
const lx_interval &)
549 inline lx_interval
operator * (
const lx_interval &,
const interval &)
552 inline lx_interval
operator * (
const interval &,
const lx_interval &)
556 inline lx_interval &
operator *=(lx_interval &,
const lx_interval &)
throw();
558 inline lx_interval &
operator *=(lx_interval &,
const l_interval &)
throw();
560 inline lx_interval &
operator *=(lx_interval &,
const l_real &)
throw();
562 inline lx_interval &
operator *=(lx_interval &,
const lx_real &)
throw();
564 inline lx_interval &
operator *=(lx_interval &,
const real &)
throw();
566 inline lx_interval &
operator *=(lx_interval &,
const interval &)
throw();
569 lx_interval
operator / (
const lx_interval &,
const lx_interval &)
570 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
573 inline lx_interval
operator / (
const lx_interval &,
const l_interval &)
574 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
576 inline lx_interval
operator / (
const l_interval &,
const lx_interval &)
577 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
579 inline lx_interval
operator / (
const lx_interval &,
const l_real &)
580 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
582 inline lx_interval
operator / (
const l_real &,
const lx_interval &)
583 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
585 inline lx_interval
operator / (
const lx_interval &,
const real &)
586 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
588 inline lx_interval
operator / (
const real &,
const lx_interval &)
589 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
591 inline lx_interval
operator / (
const lx_interval &,
const interval &)
592 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
594 inline lx_interval
operator / (
const interval &,
const lx_interval &)
595 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
597 inline lx_interval
operator / (
const lx_interval &,
const lx_real &)
598 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
600 inline lx_interval
operator / (
const lx_real &,
const lx_interval &)
601 throw(ERROR_LINTERVAL_DIV_BY_ZERO);
604 inline lx_interval &
operator /=(lx_interval &,
const lx_interval &)
throw();
606 inline lx_interval &
operator /=(lx_interval &,
const l_interval &)
throw();
608 inline lx_interval &
operator /=(lx_interval &,
const l_real &)
throw();
610 inline lx_interval &
operator /=(lx_interval &,
const lx_real &)
throw();
612 inline lx_interval &
operator /=(lx_interval &,
const real &)
throw();
614 inline lx_interval &
operator /=(lx_interval &,
const interval &)
throw();
619 inline lx_interval operator | (
const lx_interval&,
const lx_interval&)
622 inline lx_interval operator | (
const lx_interval&,
const l_interval&)
625 inline lx_interval operator | (
const l_interval&,
const lx_interval&)
628 inline lx_interval operator | (
const lx_interval&,
const interval&)
631 inline lx_interval operator | (
const interval&,
const lx_interval&)
634 inline lx_interval & operator |= (lx_interval&,
const lx_interval&)
637 inline lx_interval & operator |= (lx_interval&,
const l_interval&)
640 inline lx_interval & operator |= (lx_interval&,
const interval&)
643 inline lx_interval operator | (
const lx_real&,
const lx_interval&)
646 inline lx_interval operator | (
const real&,
const lx_interval&)
649 inline lx_interval operator | (
const lx_interval&,
const lx_real&)
652 inline lx_interval operator | (
const lx_interval&,
const real&)
655 inline lx_interval operator | (
const lx_interval&,
const l_real&)
658 inline lx_interval operator | (
const l_real&,
const lx_interval&)
661 inline lx_interval & operator |= (lx_interval&,
const real&)
664 inline lx_interval & operator |= (lx_interval&,
const l_real&)
667 inline lx_interval & operator |= (lx_interval&,
const lx_real&)
670 inline lx_interval operator | (
const lx_real&,
const lx_real&)
676 inline lx_interval operator & (
const lx_interval&,
const lx_interval&)
677 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
679 inline lx_interval operator & (
const lx_interval&,
const l_interval&)
680 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
682 inline lx_interval & operator &= (lx_interval&,
const l_interval&)
683 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
685 inline lx_interval operator & (
const l_interval&,
const lx_interval&)
686 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
688 inline lx_interval operator & (
const lx_interval&,
const interval&)
689 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
691 inline lx_interval & operator &= (lx_interval &a,
const interval &b)
692 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
694 inline lx_interval operator & (
const interval&,
const lx_interval&)
695 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
697 inline lx_interval & operator &= (lx_interval&,
const lx_interval&)
698 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
700 inline lx_interval operator & (
const lx_interval&,
const lx_real&)
701 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
703 inline lx_interval operator & (
const lx_interval&,
const l_real&)
704 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
706 inline lx_interval operator & (
const lx_interval&,
const real&)
707 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
709 inline lx_interval operator & (
const lx_real&,
const lx_interval&)
710 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
712 inline lx_interval operator & (
const l_real&,
const lx_interval&)
713 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
715 inline lx_interval operator & (
const real&,
const lx_interval&)
716 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
718 inline lx_interval & operator &= (lx_interval&,
const lx_real&)
719 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
721 inline lx_interval & operator &= (lx_interval&,
const l_real&)
722 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
724 inline lx_interval & operator &= (lx_interval&,
const real&)
725 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
730 inline lx_interval & SetInf(lx_interval&,
const lx_real&)
731 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
733 inline lx_interval & SetInf(lx_interval&,
const l_real&)
734 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
736 inline lx_interval & SetInf(lx_interval&,
const real&)
737 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
740 inline lx_interval & SetSup(lx_interval&,
const lx_real&)
741 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
743 inline lx_interval & SetSup(lx_interval&,
const l_real&)
744 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
746 inline lx_interval & SetSup(lx_interval&,
const real&)
747 throw(ERROR_LINTERVAL_EMPTY_INTERVAL);
860 lx_interval
sqrt(const lx_interval&) throw();
862 lx_interval
sqr(const lx_interval&) throw();
864 lx_interval
ln(const lx_interval &) throw();
866 lx_interval
log2(const lx_interval &) throw();
868 lx_interval
log10(const lx_interval &) throw();
870 lx_interval
lnp1(const lx_interval &) throw();
872 lx_interval
exp(const lx_interval &) throw();
874 lx_interval
exp2(const lx_interval &) throw();
876 lx_interval
exp10(const lx_interval &) throw();
878 lx_interval
expm1(const lx_interval &x) throw();
880 lx_interval
power(const lx_interval &, const real &) throw();
882 lx_interval
pow(const lx_interval &, const lx_interval &) throw();
884 lx_interval
xp1_pow_y(const lx_interval &, const lx_interval &) throw();
886 lx_interval
sin(const lx_interval &)throw();
888 lx_interval
sin_n(const lx_interval &x, const real& n) throw();
890 lx_interval
cos(const lx_interval &) throw();
892 lx_interval
cos_n(const lx_interval &x, const real& n) throw();
894 lx_interval
tan(const lx_interval &) throw();
896 lx_interval
cot(const lx_interval &) throw();
898 lx_interval
sqrt1px2(const lx_interval &) throw();
900 lx_interval
atan(const lx_interval &) throw();
902 lx_interval
sqrt1mx2(const lx_interval &) throw();
904 lx_interval
sqrtx2m1(const lx_interval &) throw();
906 lx_interval
asin(const lx_interval & ) throw();
908 lx_interval
acos(const lx_interval &) throw();
910 lx_interval
acot(const lx_interval &) throw();
912 lx_interval
sinh(const lx_interval &) throw();
914 lx_interval
cosh(const lx_interval &) throw();
916 lx_interval
tanh(const lx_interval &) throw();
918 lx_interval
coth(const lx_interval &) throw();
920 lx_interval
sqrtp1m1(const lx_interval &) throw();
922 lx_interval
asinh(const lx_interval &) throw();
924 lx_interval
acosh(const lx_interval &) throw();
926 lx_interval
acoshp1(const lx_interval &) throw();
928 lx_interval
atanh(const lx_interval &) throw();
930 lx_interval
atanh1m(const lx_interval &) throw();
932 lx_interval
atanhm1p(const lx_interval &) throw();
934 lx_interval
acoth(const lx_interval &) throw();
936 lx_interval
acothp1(const lx_interval &) throw();
938 lx_interval
acothm1m(const lx_interval &) throw();
940 lx_interval
sqrtx2y2(const lx_interval &, const lx_interval &) throw();
942 lx_interval
ln_sqrtx2y2(const lx_interval &, const lx_interval &) throw();
944 lx_interval
sqrt(const lx_interval &,
int) throw();
948 #include "lx_interval.inl"
950 #endif // _CXSC_LX_INTERVAL_HPP_INCLUDED