Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions samples/distro-examples/tests/all.bas
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ print "STATMEAN:" + STATMEAN (1,2,3,4,5,6,7,8,9)
print "STATMEANDEV:" + STATMEANDEV (1,2,3,4,5,6,7,8,9)
print "STATSPREADP:" + STATSPREADP (1,2,3,4,5,6,7,8,9)
print "STATSPREADS:" + STATSPREADS (1,2,3,4,5,6,7,8,9)
print "STATSTD:" + STATSTD (1,2,3,4,5,6,7,8,9)
print "STR:" + STR (5)
print "STRING:"; STRING(5, "Strings")
print "SUM:" + SUM (1,2,3,4,5,6,7,8,9)
Expand Down
1 change: 1 addition & 0 deletions samples/distro-examples/tests/output/all.out
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ STATMEAN:5
STATMEANDEV:2.22222222222222
STATSPREADP:6.66666666666667
STATSPREADS:7.5
STATSTD:2.73861278752583
STR:5
STRING:StringsStringsStringsStringsStrings
SUM:45
Expand Down
4 changes: 4 additions & 0 deletions src/common/blib_func.c
Original file line number Diff line number Diff line change
Expand Up @@ -2600,6 +2600,7 @@ void cmd_genfunc(long funcCode, var_t *r) {
//
//
case kwSTATMEANDEV:
case kwSTATSTD:
case kwSTATSPREADS:
case kwSTATSPREADP:
ready = 0;
Expand Down Expand Up @@ -2669,6 +2670,9 @@ void cmd_genfunc(long funcCode, var_t *r) {
case kwSTATMEANDEV:
r->v.n = statmeandev(dar, tcount);
break;
case kwSTATSTD:
r->v.n = statstd(dar, tcount);
break;
case kwSTATSPREADS:
r->v.n = statspreads(dar, tcount);
break;
Expand Down
25 changes: 25 additions & 0 deletions src/common/blib_math.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,31 @@ var_num_t statmeandev(var_num_t *e, int count) {
return sum / count;
}

//
// Standard deviation
//
var_num_t statstd(var_num_t *e, int count) {
var_num_t sum = 0.0;
var_num_t mean;
int i;

if (count == 0) {
return 0;
}

for (i = 0; i < count; i++) {
sum += e[i];
}
mean = sum / count;

sum = 0.0;
for (i = 0; i < count; i++) {
sum += pow(fabsl(e[i] - mean),2);
}

return sqrt(sum / (count - 1));
}

/*
*/
var_num_t statspreads(var_num_t *e, int count) {
Expand Down
32 changes: 29 additions & 3 deletions src/common/blib_math.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,19 +66,45 @@ var_num_t mat_determ(var_num_t *a, int n, double toler);

/**
* @ingroup math
* todo: statmeandev
*
* Mean absolute deviation around arithmetic mean
*
* @param e array with numbers
* @param count number of elements of e
* @return the mean absolute deviation around arithmetic mean
*/
var_num_t statmeandev(var_num_t *e, int count);

/**
* @ingroup math
* todo: statspreads
*
* Standard deviation
*
* @param e array with numbers
* @param count number of elements of e
* @return the standard deviation
*/
var_num_t statstd(var_num_t *e, int count);

/**
* @ingroup math
*
* Unbiased sample variance
*
* @param e array with numbers
* @param count number of elements of e
* @return Unbiased sample variance
*/
var_num_t statspreads(var_num_t *e, int count);

/**
* @ingroup math
* todo: statspreadp
*
* Biased sample variance
*
* @param e array with numbers
* @param count number of elements of e
* @return Biased sample variance
*/
var_num_t statspreadp(var_num_t *e, int count);

Expand Down
1 change: 1 addition & 0 deletions src/common/eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,7 @@ static inline void eval_callf(var_t *r) {
case kwSUMSV:
case kwSTATMEAN:
case kwSTATMEANDEV:
case kwSTATSTD:
case kwSTATSPREADS:
case kwSTATSPREADP:
case kwSEGCOS:
Expand Down
1 change: 1 addition & 0 deletions src/common/kw.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,7 @@ enum func_keywords {
kwSUM,
kwSUMSV,
kwSTATMEAN,
kwSTATSTD,
kwSTATMEANDEV,
kwSTATSPREADS,
kwSTATSPREADP,
Expand Down
1 change: 1 addition & 0 deletions src/languages/keywords.en.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ struct func_keyword_s func_table[] = {
{ "SUM", kwSUM },
{ "SUMSQ", kwSUMSV },
{ "STATMEAN", kwSTATMEAN },
{ "STATSTD", kwSTATSTD},
{ "STATMEANDEV", kwSTATMEANDEV },
{ "STATSPREADS", kwSTATSPREADS },
{ "STATSPREADP", kwSTATSPREADP },
Expand Down