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 */