24 #ifndef __signals_intervals__
25 #define __signals_intervals__
31 inline double log2(
double e) {
return log(e)/log(
double(2)); }
42 interval () : valid(false), lo(-HUGE_VAL), hi(HUGE_VAL) {}
43 interval (
double n) : valid(true), lo(n), hi(n) {}
47 bool isconst() {
return valid & (lo == hi); }
53 return dst <<
"interval(" << i.
lo <<
", " << i.
hi <<
")";
55 return dst <<
"interval()";
59 inline double min(
double x,
double y) {
return (x<y) ? x:y; }
60 inline double max(
double x,
double y) {
return (x>y) ? x:y; }
61 inline double min4(
double a,
double b,
double c,
double d) {
return min(
min(a,b),
min(c,d)); }
62 inline double max4(
double a,
double b,
double c,
double d) {
return max(
max(a,b),
max(c,d)); }
116 for (
int i=1; i<32; i*=2) { v |= v>>i; }
125 if (x.
lo >= 0 & y.
lo >= 0) {
127 }
else if (y.
lo >= 0) {
129 }
else if (x.
lo >= 0) {
134 }
else if (x.
valid & x.
lo >= 0) {
136 }
else if (y.
valid & y.
lo >= 0) {
231 }
else if (x.
hi < 0) {
interval operator+(const interval &x, const interval &y)
bool valid
true if it is a valid interval
interval(const interval &r)
interval operator^(const interval &, const interval &)
interval operator&(const interval &x, const interval &y)
interval pow(const interval &x, const interval &y)
interval abs(const interval &x)
int bitmask(double x)
Convert a number 1bbb..b into a bit mask 1111..1 of same width.
interval operator>=(const interval &, const interval &)
interval operator<(const interval &, const interval &)
double max(double x, double y)
interval operator!=(const interval &, const interval &)
interval operator-(const interval &x, const interval &y)
ostream & operator<<(ostream &dst, const interval &i)
interval operator*(const interval &x, const interval &y)
interval reunion(const interval &x, const interval &y)
double max4(double a, double b, double c, double d)
interval operator|(const interval &x, const interval &y)
interval operator/(const interval &x, const interval &y)
interval operator==(const interval &, const interval &)
double min4(double a, double b, double c, double d)
double min(double x, double y)
interval operator>>(const interval &, const interval &)
interval operator<=(const interval &, const interval &)
interval(double n, double m)
interval operator%(const interval &x, const interval &y)
interval operator>(const interval &, const interval &)