Cumulative standard deviation: Difference between revisions

Content added Content deleted
m (→‎{{header|C++}}: Fix C++ lang tag)
Line 116: Line 116:
#include <numeric>
#include <numeric>


template <typename Iterator>
double standard_dev( std::vector<double> & ) ;
double standard_dev( Iterator begin , Iterator end ) {
double mean = std::accumulate( begin , end , 0 ) / std::distance( begin , end ) ;
std::vector<double> squares ;
for( Iterator vdi = begin ; vdi != end ; vdi++ )
squares.push_back( std::pow( *vdi - mean , 2 ) ) ;
return std::sqrt( std::accumulate( squares.begin( ) , squares.end( ) , 0 ) / squares.size( ) ) ;
}


int main( ) {
int main( ) {
double demoset[] = { 2 , 4 , 4 , 4 , 5, 5 , 7 , 9 } ;
double demoset[] = { 2 , 4 , 4 , 4 , 5 , 5 , 7 , 9 } ;
int demosize = sizeof demoset / sizeof *demoset ;
int demosize = sizeof demoset / sizeof *demoset ;
std::vector<double> numbers ;
for ( double *d = demoset ; d != demoset + demosize ; ++d )
numbers.push_back( *d ) ;
std::cout << "The standard deviation of\n" ;
std::cout << "The standard deviation of\n" ;
std::copy( numbers.begin( ) , numbers.end( ) , std::ostream_iterator<double>( std::cout, " " ) ) ;
std::copy( demoset , demoset + demosize , std::ostream_iterator<double>( std::cout, " " ) ) ;
std::cout << "\nis " << standard_dev( numbers ) << " !\n" ;
std::cout << "\nis " << standard_dev( demoset , demoset + demosize ) << " !\n" ;
return 0 ;
return 0 ;
}

double standard_dev( std::vector<double> & numbers ) {
double mean = std::accumulate( numbers.begin( ) , numbers.end( ) , 0 ) / numbers.size( ) ;
std::vector<double> squares ;
for( std::vector<double>::const_iterator vdi = numbers.begin( ) ; vdi != numbers.end( ) ; vdi++ )
squares.push_back( pow( *vdi - mean , 2 ) ) ;
return pow( std::accumulate( squares.begin( ) , squares.end( ) , 0 ) / squares.size( ) , 0.5 ) ;
}</lang>
}</lang>