2017-02-17 1 views
-2

어떤 이유로 든 내 코드가 어떤 이유로 표준 편차를 올바르게 실행하지 못합니다. 누군가가 지금 당장 나를 도울 수 있다면 그것은 위대하고 나는 영원히 당신의 빚을 질 것입니다.표준 편차가 작동하지 않습니다

amtNumbers = MINIMUM_COUNT + (rand() % (MAXIMUM_COUNT - MINIMUM_COUNT + 1)); 
cout << "The program will generate" << setw(3) << amtNumbers << (setw (8)) << "numbers" << endl; 

cout << endl << "The numbers are: "; 

for (int i = 0; i < amtNumbers; i++) 
{ 
    valNums = MINIMUM_VAL + (rand() % (MAXIMUM_VAL - MINIMUM_VAL + 1)); 
    cout << setw(3)<< valNums; 
    sum += valNums; 
    sqrdSum += (valNums*valNums); 
    sumSqrd = (sum * sum); 
} 

numAverage = (sum += valNums)/ amtNumbers; 
numSTD = sqrt ((sqrdSum - (sumSqrd/ amtNumbers))/amtNumbers - 1); 
cout << endl 

답변

3

표준 편차에 대한 공식은 다음과 같습니다

enter image description here

참고 각 요소를 뺀 평균의 제곱의 합 부분.

당신의 공식이이에 해당합니다

sqrt ((sqrdSum - (sumSqrd/ amtNumbers))/amtNumbers - 1) 

:

enter image description here

귀하의 문제는 당신이 실제로 표준 편차를 계산되지 않습니다이다.

+0

이 문제를 해결하는 방법에 대해 혼란스러워합니다. 변수를 바꾸려면 어떤 변수가 필요합니까? 변수가 없습니다. – Spartan5434

+1

@ Spartan5434 * 잘못된 방정식의 코드 구현을 작성했습니다. 그래서 바로 * 올바른 코드 구현. 그리고 그렇게하는 동안 적절한 변수가 올바른 타입인지 확인해야합니다. 정수 단위는 이것을 할 때 몇 명 이상의 사람들을 물었습니다. 어쩌면 그게 문제가 아닐지도 모르지만, 게시물을 테스트하는 데 필요한 모든 코드가 없기 때문에 실제로 알게 될 것입니다. – WhozCraig

+0

나머지 변수는 여전히 내 변수를 공식에 적용하여 작동하도록합니다. // 변수 선언 int amtNumbers, valNums; double sum = 0; double numAverage = 0; 두 번 numSTD = 0; double sqrdSum = 0; double sumSqrd = 0; // 숫자 생성기의 상수 선언하기 const int MINIMUM_COUNT = 2; const int MAXIMUM_COUNT = 10; const int MAXIMUM_VAL = 50; const int MINIMUM_VAL = 10; – Spartan5434

0

솔루션에서 사용할 수있는 완벽한 샘플입니다.

#include <math.h> 
#include <vector> 

double StandardDeviation(std::vector<double>); 
double Variance(std::vector<double>); 

int main() 
{ 
    std::vector<double> samples; 
    samples.push_back(2.0); 
    samples.push_back(3.0); 
    samples.push_back(4.0); 
    samples.push_back(5.0); 
    samples.push_back(6.0); 
    samples.push_back(7.0); 

    double std = StandardDeviation(samples); 
    return 0; 
} 

double StandardDeviation(std::vector<double> samples) 
{ 
    return sqrt(Variance(samples)); 
} 

double Variance(std::vector<double> samples) 
{ 
    int size = samples.size(); 

    double variance = 0; 
    double t = samples[0]; 
    for (int i = 1; i < size; i++) 
    { 
     t += samples[i]; 
     double diff = ((i + 1) * samples[i]) - t; 
     variance += (diff * diff)/((i + 1.0) *i); 
    } 

    return variance/(size - 1); 
} 
관련 문제