interval.hh File Reference

#include <math.h>
#include <iostream>
Include dependency graph for interval.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  interval

Functions

ostream & operator<< (ostream &dst, const interval &i)
double min (double x, double y)
double max (double x, double y)
double min4 (double a, double b, double c, double d)
double max4 (double a, double b, double c, double d)
interval reunion (const interval &x, const interval &y)
interval operator+ (const interval &x, const interval &y)
interval operator- (const interval &x, const interval &y)
interval operator* (const interval &x, const interval &y)
interval operator/ (const interval &x, const interval &y)
interval operator% (const interval &x, const interval &y)
int bitmask (double x)
interval operator& (const interval &x, const interval &y)
interval operator| (const interval &x, const interval &y)
interval operator^ (const interval &, const interval &)
interval operator<< (const interval &, const interval &)
interval operator>> (const interval &, const interval &)
interval operator< (const interval &, const interval &)
interval operator<= (const interval &, const interval &)
interval operator> (const interval &, const interval &)
interval operator>= (const interval &, const interval &)
interval operator== (const interval &, const interval &)
interval operator!= (const interval &, const interval &)
interval min (const interval &x, const interval &y)
interval max (const interval &x, const interval &y)
interval abs (const interval &x)

Function Documentation

interval abs ( const interval x  )  [inline]

Definition at line 206 of file interval.hh.

References interval::hi, interval::lo, max(), and interval::valid.

Referenced by mterm::complexity().

00207 {
00208     if (x.valid) {
00209         if (x.lo >= 0) {
00210             return x;
00211         } else if (x.hi < 0) {
00212             return interval(fabs(x.hi), fabs(x.lo));
00213         } else {
00214             return interval(0, max(fabs(x.lo), x.hi));
00215         }
00216     } else {
00217         return x;
00218     }
00219 }       

Here is the call graph for this function:

Here is the caller graph for this function:

int bitmask ( double  x  )  [inline]

Definition at line 111 of file interval.hh.

Referenced by operator&(), and operator|().

00111 { return (1 << (int(log2(x))+1)) - 1; }

Here is the caller graph for this function:

interval max ( const interval x,
const interval y 
) [inline]

Definition at line 201 of file interval.hh.

References interval::hi, interval::lo, and max().

00202 {
00203     return interval(max(x.lo,y.lo), max(x.hi,y.hi));
00204 }

Here is the call graph for this function:

double max ( double  x,
double  y 
) [inline]
double max4 ( double  a,
double  b,
double  c,
double  d 
) [inline]

Definition at line 62 of file interval.hh.

References max().

Referenced by operator*().

00062 { return max(max(a,b),max(c,d)); }

Here is the call graph for this function:

Here is the caller graph for this function:

interval min ( const interval x,
const interval y 
) [inline]

Definition at line 196 of file interval.hh.

References interval::hi, interval::lo, and min().

00197 {
00198     return interval(min(x.lo,y.lo), min(x.hi,y.hi));
00199 }

Here is the call graph for this function:

double min ( double  x,
double  y 
) [inline]
double min4 ( double  a,
double  b,
double  c,
double  d 
) [inline]

Definition at line 61 of file interval.hh.

References min().

Referenced by operator*().

00061 { return min(min(a,b),min(c,d)); }

Here is the call graph for this function:

Here is the caller graph for this function:

interval operator!= ( const interval ,
const interval  
) [inline]

Definition at line 189 of file interval.hh.

00190 {
00191     return interval(0,1);
00192 }

interval operator% ( const interval x,
const interval y 
) [inline]

Definition at line 104 of file interval.hh.

References interval::hi, interval::lo, and interval::valid.

00105 {
00106     return (x.valid && y.valid && x.lo >= 0 && y.lo > 0) 
00107             ? interval(0,y.hi)
00108             : interval();
00109 }

interval operator& ( const interval x,
const interval y 
) [inline]

Definition at line 115 of file interval.hh.

References bitmask(), interval::hi, interval::lo, and interval::valid.

00116 {
00117     if (x.valid && y.valid) {
00118         if (x.lo >= 0 & y.lo >= 0) {
00119             return interval(0, bitmask(x.hi) & bitmask(y.hi));
00120         } else if (y.lo >= 0) {
00121             return interval(0, bitmask(y.hi));
00122         } else if (x.lo >= 0) {
00123             return interval(0, bitmask(y.hi));
00124         } else {
00125             return interval();
00126         }
00127     } else if (x.valid & x.lo >= 0) {
00128         return interval(0, bitmask(x.hi));
00129     } else if (y.valid & y.lo >= 0) {
00130         return interval(0, bitmask(y.hi));
00131     } else {
00132         return interval();
00133     }
00134 }

Here is the call graph for this function:

interval operator* ( const interval x,
const interval y 
) [inline]

Definition at line 84 of file interval.hh.

References interval::hi, interval::lo, max4(), min4(), and interval::valid.

00085 { 
00086     if (x.valid&y.valid) {
00087         double a=x.lo*y.lo; 
00088         double b=x.lo*y.hi; 
00089         double c=x.hi*y.lo; 
00090         double d=x.hi*y.hi;
00091         return interval(min4(a,b,c,d), max4(a,b,c,d));
00092     } else {
00093         return interval();
00094     }
00095 }

Here is the call graph for this function:

interval operator+ ( const interval x,
const interval y 
) [inline]

Definition at line 74 of file interval.hh.

References interval::hi, interval::lo, and interval::valid.

00075 { 
00076     return (x.valid&y.valid) ? interval(x.lo+y.lo, x.hi+y.hi) : interval(); 
00077 }

interval operator- ( const interval x,
const interval y 
) [inline]

Definition at line 79 of file interval.hh.

References interval::hi, interval::lo, and interval::valid.

00080 { 
00081     return (x.valid & y.valid) ? interval(x.lo-y.hi, x.hi-y.lo) : interval();; 
00082 }

interval operator/ ( const interval x,
const interval y 
) [inline]

Definition at line 97 of file interval.hh.

References interval::hi, interval::lo, and interval::valid.

00098 {
00099     return (x.valid && y.valid && (y.lo > 0 | y.hi < 0)) 
00100             ? x * interval(1/y.hi,1/y.lo)
00101             : interval();
00102 }

interval operator< ( const interval ,
const interval  
) [inline]

Definition at line 164 of file interval.hh.

00165 {
00166     return interval(0,1);
00167 }

interval operator<< ( const interval ,
const interval  
) [inline]

Definition at line 150 of file interval.hh.

00151 {
00152     return interval();
00153 }

ostream& operator<< ( ostream &  dst,
const interval i 
) [inline]

Definition at line 50 of file interval.hh.

References interval::hi, interval::lo, and interval::valid.

00051 { 
00052     if (i.valid) {
00053         return  dst << "interval(" << i.lo << ", " << i.hi << ")";
00054     } else {
00055         return  dst << "interval()";
00056     }
00057 }

interval operator<= ( const interval ,
const interval  
) [inline]

Definition at line 169 of file interval.hh.

00170 {
00171     return interval(0,1);
00172 }

interval operator== ( const interval ,
const interval  
) [inline]

Definition at line 184 of file interval.hh.

00185 {
00186     return interval(0,1);
00187 }

interval operator> ( const interval ,
const interval  
) [inline]

Definition at line 174 of file interval.hh.

00175 {
00176     return interval(0,1);
00177 }

interval operator>= ( const interval ,
const interval  
) [inline]

Definition at line 179 of file interval.hh.

00180 {
00181     return interval(0,1);
00182 }

interval operator>> ( const interval ,
const interval  
) [inline]

Definition at line 155 of file interval.hh.

00156 {
00157     return interval();
00158 }

interval operator^ ( const interval ,
const interval  
) [inline]

Definition at line 145 of file interval.hh.

00146 {
00147     return interval();
00148 }

interval operator| ( const interval x,
const interval y 
) [inline]

Definition at line 136 of file interval.hh.

References bitmask(), interval::hi, interval::lo, and interval::valid.

00137 {
00138     if (x.valid && y.valid && x.lo >= 0 && y.lo >= 0) {
00139         return interval(0, bitmask(x.hi) | bitmask(y.hi));
00140     } else {
00141         return interval();
00142     }
00143 }

Here is the call graph for this function:

interval reunion ( const interval x,
const interval y 
) [inline]

Definition at line 64 of file interval.hh.

References interval::hi, interval::lo, max(), min(), and interval::valid.

Referenced by infereSigType().

00065 {
00066     if (x.valid & y.valid) {
00067         return interval(min(x.lo,y.lo), max(x.hi,y.hi));
00068     } else {
00069         return interval();
00070     }
00071 }

Here is the call graph for this function:

Here is the caller graph for this function:

Generated on Thu Jul 15 15:47:05 2010 for FAUST compiler by  doxygen 1.6.3