Measurement.cc

00001 // Copyright 2008 Michael Marsh, University of Maryland.
00002 //
00003 // This file is part of pydtn.
00004 //
00005 // pydtn is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // pydtn is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with pydtn.  If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 // The views and conclusions contained in the software and documentation
00019 // are those of the authors and should not be interpreted as representing
00020 // official policies, either expressed or implied, of the University
00021 // of Maryland.
00022 //
00023 // pydtn extends and embeds the Python interpreter, which is
00024 // Copyright 2001-2006 Python Software Foundation, All Rights Reserved,
00025 // and is released under the PSF License Agreement.
00026 //
00027 // RANLUX random number generation uses the Boost library,
00028 // Copyright 1994-2006 by various authors (details in individual files),
00029 // which is released under the Boost Software License, Version 1.0.
00030 
00031 #include "Measurement.h"
00032 #include <math.h>
00033 #include <ostream>
00034 
00035 Measurement::Measurement() :
00036    m_value   ( 0 ),
00037    m_variance( 0 ),
00038    m_sigma   ( 0 )
00039 {
00040 }
00041 
00042 Measurement::Measurement( double val, double var ) :
00043    m_value   ( val       ),
00044    m_variance( var       ),
00045    m_sigma   ( sqrt(var) )
00046 {
00047 }
00048 
00049 Measurement::Measurement( unsigned long int val ) :
00050    m_value   ( val       ),
00051    m_variance( val       ),
00052    m_sigma   ( sqrt(val) )
00053 {
00054 }
00055 
00056 Measurement::Measurement( const Measurement& m ) :
00057    m_value   ( m.m_value    ),
00058    m_variance( m.m_variance ),
00059    m_sigma   ( m.m_sigma    )
00060 {
00061 }
00062 
00063 Measurement::~Measurement()
00064 {
00065 }
00066 
00067 void
00068 Measurement::operator=( const Measurement& m )
00069 {
00070    if ( &m == this ) return;
00071 
00072    m_value    = m.m_value;
00073    m_variance = m.m_variance;
00074    m_sigma    = m.m_sigma;
00075 }
00076 
00077 Measurement
00078 Measurement::operator+( const Measurement& m ) const
00079 {
00080    double val = m_value + m.m_value;
00081    double var = m_variance + m.m_variance;
00082    return Measurement( val, var );
00083 }
00084 
00085 Measurement
00086 Measurement::operator-( const Measurement& m ) const
00087 {
00088    double val = m_value - m.m_value;
00089    double var = m_variance + m.m_variance;
00090    return Measurement( val, var );
00091 }
00092 
00093 Measurement
00094 Measurement::operator*( const Measurement& m ) const
00095 {
00096    double val = m_value   * m.m_value;
00097    double x2  = m_value   * m_value;
00098    double y2  = m.m_value * m.m_value;
00099    double var = y2 * m_variance  +  x2 * m.m_variance;
00100    return Measurement( val, var );
00101 }
00102 
00103 Measurement
00104 Measurement::operator/( const Measurement& m ) const
00105 {
00106    double val = m_value   / m.m_value;
00107    double y2  = m.m_value * m.m_value;
00108    double var = ( m_variance + val*val*m.m_variance ) / y2;
00109    return Measurement( val, var );
00110 }
00111 
00112 bool
00113 Measurement::operator<( const Measurement& m ) const
00114 {
00115    return m_value < m.m_value;
00116 }
00117 
00118 bool
00119 Measurement::operator>( const Measurement& m ) const
00120 {
00121    return m_value > m.m_value;
00122 }
00123 
00124 std::ostream&
00125 operator<<(std::ostream& stream, const Measurement& m)
00126 {
00127    stream << m.value() << (char)177 << m.deviation();
00128    return stream;
00129 }

Generated on Mon Mar 24 11:15:46 2008 for Pydtn Simulator by  doxygen 1.5.4