00001
00021 #ifndef MEASURE_H
00022 #define MEASURE_H
00023
00024
00025
00026
00027
00028
00029
00030 #include <math.h>
00031
00032
00033
00034
00035
00036
00037
00042 typedef struct
00043 {
00044 long num_samples;
00045 float sum_of_samples;
00046 float sum_of_squares;
00047 } MEASUREMENT;
00048
00049
00050
00051
00052
00053
00054
00055
00059 #define ADD_SAMPLE(m,s) \
00060 (m.sum_of_samples += (float) (s), \
00061 m.sum_of_squares += (float) (s) * (float) (s), \
00062 ++m.num_samples)
00063
00067 #define MEAN(m) \
00068 ((m).num_samples ? ((float) ((m).sum_of_samples / (m).num_samples)) : 0)
00069
00073 #define new_measurement(m) \
00074 ((m).num_samples = 0, \
00075 (m).sum_of_samples = 0, \
00076 (m).sum_of_squares = 0)
00077
00081 #define number_of_samples(m) ((m).num_samples)
00082
00086 #define standard_deviation(m) ((float) sqrt (VARIANCE (m)))
00087
00091 #define VARIANCE(m) \
00092 (((m).num_samples > 1) ? \
00093 ((float) \
00094 (((m).num_samples * (m).sum_of_squares - \
00095 (m).sum_of_samples * (m).sum_of_samples) / \
00096 (((m).num_samples - 1) * (m).num_samples))) : 0)
00097
00101 #define print_summary(string,measure) \
00102 cprintf ("\t%-20s \tn = %d, \tm = %4.2f, \ts = %4.2f\n ", \
00103 string, \
00104 number_of_samples (measure), \
00105 MEAN (measure), \
00106 standard_deviation (measure))
00107 #endif