2017-11-11 8 views
-2

我有一個功能強大的程序來查找許多整數的標準偏差。但是,我想找到一種方法來獲得沒有平均值的標準偏差。沒有意思的標準偏差C++

我理解的公式爲: 標準偏差= SQRT [(B - A^2/N)/ N]

其中

A是數據值的總和;

B是平方數據值的總和;

N是數據值的數量。

但我怎麼會寫在代碼? 這是我對偏差的功能,但它使用的意思是:

float calculateSD(int arr[]) 
{ 
float sum = 0.0, mean, standardDeviation = 0.0; 

int i; 

for(i = 0; i < SIZE; ++i) 
{ 
    sum += arr[i]; 
} 

mean = sum/SIZE; 

for(i = 0; i < SIZE; ++i) 
    //convert standardDeviation to float 
    standardDeviation += static_cast<float>(pow(arr[i] - mean, 2)); 
//return standard deviation 
return sqrt(standardDeviation/SIZE); 

}  
+0

'得到標準差不mean'我可以問爲什麼? – DimChtz

+0

家庭作業也許? – twoleggedhorse

+1

你有總和和數量。劃分.....來吧。 –

回答

0
#include <iostream> 
#include <vector> 
#include <numeric> 
#include <math.h> 

double stddev(std::vector<int> const& data) 
{ 
    auto stats = std::make_pair(0.0,0.0); 
    stats = std::accumulate(data.begin(), data.end(), stats, 
          [](std::pair<double,double> stats, double x) { 
           stats.first += x; 
           stats.second += x * x; 
           return stats; 
          }); 
    return sqrt((stats.second - pow(stats.first, 2.0)/data.size())/data.size()); 
} 

int main(int argc, const char *argv[]) 
{ 
    std::cout << stddev({1,1,1,1}) << std::endl; 
    std::cout << stddev({1,2,1,2}) << std::endl; 
    std::cout << stddev({1,10,1,10}) << std::endl; 
}