Listing 1: Definition of class UDouble
// model uncertain number using only mean and sigma (pure Gaussian)
template <int is_correlated>
class UDouble
{
private:
double value;
double uncertainty;
public:
UDouble(const double, const double);
UDouble(const UDouble&);
~UDouble(void);
UDouble<is_correlated> operator +(void) const;
UDouble<is_correlated> operator -(void) const;
friend UDouble<is_correlated> operator +(UDouble<is_correlated>,
const UDouble<is_correlated>&);
friend UDouble<is_correlated> operator -(UDouble<is_correlated>,
const UDouble<is_correlated>&);
UDouble<is_correlated> operator ++();
UDouble<is_correlated> operator --();
UDouble<is_correlated> operator ++(int);
UDouble<is_correlated> operator --(int);
friend UDouble<is_correlated> operator *(UDouble<is_correlated>,
const UDouble<is_correlated>&);
friend UDouble<is_correlated> operator /(UDouble<is_correlated>,
const UDouble<is_correlated>&);
UDouble<is_correlated> &operator +=(const UDouble<is_correlated>&);
UDouble<is_correlated> &operator -=(const UDouble<is_correlated>&);
UDouble<is_correlated> &operator *=(const UDouble<is_correlated>&);
UDouble<is_correlated> &operator /=(const UDouble<is_correlated>&);
friend ostream& operator <<(ostream &, const UDouble<is_correlated>&);
friend istream& operator >(istream &, UDouble<is_correlated>);
// math library functions
friend UDouble<is_correlated> ceil(UDouble<is_correlated>);
friend UDouble<is_correlated> floor(UDouble<is_correlated>);
friend UDouble<is_correlated> fabs(UDouble<is_correlated>);
friend UDouble<is_correlated> ldexp(UDouble<is_correlated>, int);
friend UDouble<is_correlated> modf(UDouble<is_correlated>, double *);
friend UDouble<is_correlated> frexp(UDouble<is_correlated>, int *);
friend UDouble<is_correlated> fmod(const UDouble<is_correlated>&,
const UDouble<is_correlated>&);
friend UDouble<is_correlated> sqrt(UDouble<is_correlated>);
friend UDouble<is_correlated> sin(UDouble<is_correlated>);
friend UDouble<is_correlated> cos(UDouble<is_correlated>);
friend UDouble<is_correlated> tan(UDouble<is_correlated>);
friend UDouble<is_correlated> asin(UDouble<is_correlated>);
friend UDouble<is_correlated> acos(UDouble<is_correlated>);
friend UDouble<is_correlated> atan(UDouble<is_correlated>);
friend UDouble<is_correlated> atan2(const UDouble<is_correlated>&,
const UDouble<is_correlated>&);
friend UDouble<is_correlated> exp(UDouble<is_correlated>);
friend UDouble<is_correlated> log(UDouble<is_correlated>);
friend UDouble<is_correlated> log10(UDouble<is_correlated>);
friend UDouble<is_correlated> sinh(UDouble<is_correlated>);
friend UDouble<is_correlated> cosh(UDouble<is_correlated>);
friend UDouble<is_correlated> tanh(UDouble<is_correlated>);
friend UDouble<is_correlated> pow(const UDouble<is_correlated>&,
const UDouble<is_correlated>&);
// read-only access to data members
double mean(void) const;
double deviation(void) const;
friend UDouble<is_correlated> PropagateUncertaintiesBySlope(
double (*)(double),
const UDouble<is_correlated>&);
friend UDouble<is_correlated> PropagateUncertaintiesBySlope(
double (*)(double, double),
const UDouble<is_correlated>&,
const UDouble<is_correlated>&);
};
/* End of File */