[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
Solved

# Finding the Standard deviation from a structure of numbers

Posted on 2003-11-25
Medium Priority
364 Views
Im trying to find the standard deviation from a structure of numbers.
the array is in the format:

s[x].sid=            301111;
s[x].mark=      50;

were x is incremented for every user.

heres the code for the standard deviation, its in the form of a function initalised using:

float stdDev(struct student s[], int n);

and called using:

stdDev(staff,ARR_SIZE);

heres the function... it just crashes! theres 5 entrys, which should be passed to the function in n
float stdDev(struct student s[], int n)
{
int x;
float  mean, sigma;

mean = s[x].sid / n;
for (x=0; x<5; x++) n += (mean - s[x].mark)*(mean-s[x].mark);
sigma = sqrt(n/5);
printf("Std Deviation is %f",sigma);

return sigma;
0
Question by:chinswain
• 5
• 2
• 2

LVL 14

Expert Comment

ID: 9819557
You're trying to access your struct in:

mean = s[x].sid / n;

but x has not been initialized!

Try to change:

int x;

to:

int x = 0;
0

LVL 14

Expert Comment

ID: 9819564
Also, the for() loop, change:

for (x=0; x<5; x++)

to:

for (x=0; x<n; x++)

as 'n' is the size of the array!
0

Author Comment

ID: 9820212
Its returning: -1.#IND00 any ideas on what could be wrong?
if that would be any easier? or is there a better way to work out the Standard Deviation!

float stdDev(struct student s[], int n);

*/function called with:*/
stdDev(staff,ARR_SIZE);

*/Function:*/

float stdDev(struct student s[], int n)
{
int x = 0;
float  mean, sigma;

mean = s[x].sid / n;
for (x=0; x<n; x++) n += (mean - s[x].mark)*(mean-s[x].mark);
sigma = sqrt(n/5);
printf("Std Deviation is %f",sigma);
0

LVL 14

Expert Comment

ID: 9821055
Ok, I had a closer look at your aglorithm, and it is not correct, which of course is why you're getting the wrong result.

Change to the following:

float mean_mark(struct student s[], int n)
{
int i;
int acc = 0;
for( i=0; i<n; i++ )
{
acc += s[i].mark;
}
return (float)acc / (float)n;
}

float stdDev(struct student s[], int n)
{
int x;
float  mean, sigma, sum = 0.0f;

mean = mean_mark( s, n );
for (x=0; x<n; x++)
{
sum += pow(mean - s[x].mark, 2.0);
}
sigma = sqrtf(sum/(n -1));
std::cout << "Std Deviation is %f" << sigma;

return sigma;
}

Good luck!
0

Author Comment

ID: 9839878
I belive this is a C++ alternative, is it possible to modify this for C? i think pow is the only command thats C++, apart from that, its perfect
0

LVL 14

Accepted Solution

Tommy Braas earned 1000 total points
ID: 9840774
The code above is pure C. pow is included in the standard math.h

So the code is working for you now?
0

LVL 3

Expert Comment

ID: 9853044
>>> std::cout << "Std Deviation is %f" << sigma;
>>>The code above is pure C
???!!!

replace that with a printf() and replace
pow (x, 2.0)
with
(x * x)

0

LVL 14

Expert Comment

ID: 9864021
The code that does the work is pure C. The std::cout was a lapse.

0

LVL 3

Expert Comment

ID: 9880593
I figured but couldn't resist the urge to be pedantic.  :)
E.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ouā¦
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to useā¦
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
###### Suggested Courses
Course of the Month18 days, 14 hours left to enroll