Feature #2322 ยป add_stdev.diff
math.c 2009-11-01 15:23:53.000000000 -0500 | ||
---|---|---|
}
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* Math.stdev(array) => double
|
||
*
|
||
* Computes the standard deviation of the elements in an <i>array</i>
|
||
* If they are all numbers.
|
||
*
|
||
*
|
||
*/
|
||
|
||
static VALUE
|
||
math_stdev(VALUE obj, VALUE ary)
|
||
{
|
||
long i;
|
||
double sum = 0.0;
|
||
double mean = 0.0;
|
||
double numer = 0.0;
|
||
|
||
|
||
for (i=0; i<RARRAY_LEN(ary); i++) {
|
||
if( TYPE(RARRAY_PTR(ary)[i]) == T_STRING) {
|
||
rb_raise(rb_eTypeError, "Element is not a number!");
|
||
} else {
|
||
sum = sum + NUM2DBL(RARRAY_PTR(ary)[i]);
|
||
}
|
||
}
|
||
mean = sum / RARRAY_LEN(ary);
|
||
|
||
for (i=0; i<RARRAY_LEN(ary); i++) {
|
||
if( TYPE(RARRAY_PTR(ary)[i]) == T_STRING) {
|
||
rb_raise(rb_eTypeError, "Element is not a number!");
|
||
} else {
|
||
numer = numer + pow((NUM2DBL(RARRAY_PTR(ary)[i]) - mean), 2);
|
||
}
|
||
}
|
||
|
||
return DBL2NUM(sqrt(numer / RARRAY_LEN(ary)));
|
||
}
|
||
/*
|
||
* call-seq:
|