diff options
Diffstat (limited to 'tesseract/src/wordrec/measure.h')
-rw-r--r-- | tesseract/src/wordrec/measure.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/tesseract/src/wordrec/measure.h b/tesseract/src/wordrec/measure.h new file mode 100644 index 00000000..e249a19d --- /dev/null +++ b/tesseract/src/wordrec/measure.h @@ -0,0 +1,120 @@ +/****************************************************************************** + * + * File: measure.h + * Description: Statistics for a group of single measurements + * Author: Mark Seaman, SW Productivity + * + * (c) Copyright 1987, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *****************************************************************************/ + +#ifndef MEASURE_H +#define MEASURE_H + +/* +---------------------------------------------------------------------- + I n c l u d e s +---------------------------------------------------------------------- +*/ + +#include <cmath> + +/* +---------------------------------------------------------------------- + T y p e s +---------------------------------------------------------------------- +*/ + +typedef struct +{ + long num_samples; + float sum_of_samples; + float sum_of_squares; +} MEASUREMENT; + +/* +---------------------------------------------------------------------- + M a c r o s +---------------------------------------------------------------------- +*/ + +/********************************************************************** + * add_sample + * + * Add one more sample to a measurement. + **********************************************************************/ + +#define ADD_SAMPLE(m, s) \ + (m.sum_of_samples += (float)(s), \ + m.sum_of_squares += (float)(s) * (float)(s), ++m.num_samples) + +/********************************************************************** + * mean + * + * Return the mean value of the measurement. + **********************************************************************/ + +#define MEAN(m) \ + ((m).num_samples ? ((float)((m).sum_of_samples / (m).num_samples)) : 0) + +/********************************************************************** + * new_measurement + * + * Initialize a record to hold a measurement of a group of individual + * samples. + **********************************************************************/ + +#define new_measurement(m) \ + ((m).num_samples = 0, (m).sum_of_samples = 0, (m).sum_of_squares = 0) + +/********************************************************************** + * number_of_samples + * + * Return the number of samples in a measurement. + **********************************************************************/ + +#define number_of_samples(m) \ +((m).num_samples) + +/********************************************************************** + * standard_deviation + * + * Return the standard deviation of the measurement. + **********************************************************************/ + +#define standard_deviation(m) \ +((float) sqrt (VARIANCE (m))) + +/********************************************************************** + * variance + * + * Return the variance of the measurement. + **********************************************************************/ + +#define VARIANCE(m) \ + (((m).num_samples > 1) \ + ? ((float)(((m).num_samples * (m).sum_of_squares - \ + (m).sum_of_samples * (m).sum_of_samples) / \ + (((m).num_samples - 1) * (m).num_samples))) \ + : 0) + +/********************************************************************** + * print_summary + * + * Summarize a MEASUREMENT record. + **********************************************************************/ + +#define print_summary(string, measure) \ + tprintf("\t%-20s \tn = %d, \tm = %4.2f, \ts = %4.2f\n ", string, \ + number_of_samples(measure), MEAN(measure), \ + standard_deviation(measure)) +#endif |