//--------------------------------------------------------------------------// // Interval Class "interval.h" // //--------------------------------------------------------------------------// #include #include #include #include #include "roundvc.h" #include class Interval{ double a; //lower bound double b; //upper bound public: Interval(void) { } Interval(double x) { a=x; b=x; } Interval(double x, double y) { a=x; b=y; } double& Inf() { return a; } double& Sup() { return b; } friend Interval operator+(const Interval& x, const Interval& y); friend Interval operator-(const Interval& x, const Interval& y); Interval operator+=(const Interval& x) { down; a += x.a; up; b += x.b; return (*this); } Interval operator-=(const Interval& x) { down; a -= x.b; up; b -= x.a; return (*this); } friend Interval operator*(const Interval& x, const Interval& y); friend Interval operator/(const Interval& x, const Interval& y); friend ostream& operator<<(ostream& s, Interval& x); }; inline Interval operator+(const Interval& x, const Interval& y) { Interval z; down; z.a = x.a + y.a; up; z.b = x.b + y.b; return z; } inline Interval operator-(const Interval& x, const Interval& y) { Interval z; down; z.a = x.a - y.b; up; z.b = x.b - y.b; return z; } Interval operator*(const Interval& x, const Interval& y) { Interval z; double temp; if(x.a>=0.) { if(y.a>=0.) { down; z.a=x.a*y.a; up; z.b=x.b*y.b; } else if(y.b <=0.) { down; z.a=x.b*y.a; up; z.b=x.a*y.b; } else { down; z.a=x.b*y.a; up; z.b=x.b*y.b; } } else if(x.b <= 0.) { if(y.a>=0.) { down; z.a=x.a*y.b; up; z.b=x.b*y.a; } else if(y.b <=0.) { down; z.a=x.b*y.b; up; z.b=x.a*y.a; } else { down; z.a=x.a*y.b; up; z.b=x.a*y.a; } } else { if(y.a>=0.) { down; z.a=x.a*y.b; up; z.b=x.b*y.b; } else if(y.b <=0.) { down; z.a=x.b*y.a; up; z.b=x.a*y.a; } else { down; z.a=x.a*y.b; temp=x.b*y.a; if(temp < z.a) z.a=temp; up; z.b=x.a*y.a; temp=x.b*y.b; if(temp>z.b) z.b=temp; } } return z; } Interval operator/(const Interval& x, const Interval& y) { Interval z; if(y.a>=0.) { if(x.a>=0.) { down; z.a=x.a/y.b; up; z.b=x.b/y.a; } else if(x.b <=0.) { down; z.a=x.a/y.a; up; z.b=x.b/y.b; } else { down; z.a=x.a/y.a; up; z.b=x.b/y.a; } } else if(y.b < 0.) { if(x.a>=0.) { down; z.a=x.b/y.b; up; z.b=x.a/y.a; } else if(x.b <=0.) { down; z.a=x.b/y.a; up; z.b=x.a/y.b; } else { down; z.a=x.b/y.b; up; z.b=x.a/y.b; } } else { cout << "Division by 0\n"; exit(1); } return z; } ostream& operator<<(ostream& s, Interval& x) { return (s<<'[' <