Blame src/utils/cost_utils.c

Packit 577717
#include <stdio.h>
Packit 577717
#include <math.h>
Packit 577717
Packit 577717
#define NUM_ITERS	1000000
Packit 577717
Packit 577717
int num_iters = NUM_ITERS;
Packit 577717
Packit 577717
/* computes min, max, and mean for an array; returns std deviation */
Packit 577717
double
Packit 577717
do_stats( long long *array, long long *min, long long *max, double *average )
Packit 577717
{
Packit 577717
	int i;
Packit 577717
	double std, tmp;
Packit 577717
Packit 577717
	*min = *max = array[0];
Packit 577717
	*average = 0;
Packit 577717
	for ( i = 0; i < num_iters; i++ ) {
Packit 577717
		*average += ( double ) array[i];
Packit 577717
		if ( *min > array[i] )
Packit 577717
			*min = array[i];
Packit 577717
		if ( *max < array[i] )
Packit 577717
			*max = array[i];
Packit 577717
	}
Packit 577717
	*average = *average / ( double ) num_iters;
Packit 577717
	std = 0;
Packit 577717
	for ( i = 0; i < num_iters; i++ ) {
Packit 577717
		tmp = ( double ) array[i] - ( *average );
Packit 577717
		std += tmp * tmp;
Packit 577717
	}
Packit 577717
	std = sqrt( std / ( num_iters - 1 ) );
Packit 577717
	return ( std );
Packit 577717
}
Packit 577717
Packit 577717
void
Packit 577717
do_std_dev( long long *a, int *s, double std, double ave )
Packit 577717
{
Packit 577717
	int i, j;
Packit 577717
	double dev[10];
Packit 577717
Packit 577717
	for ( i = 0; i < 10; i++ ) {
Packit 577717
		dev[i] = std * ( i + 1 );
Packit 577717
		s[i] = 0;
Packit 577717
	}
Packit 577717
Packit 577717
	for ( i = 0; i < num_iters; i++ ) {
Packit 577717
		for ( j = 0; j < 10; j++ ) {
Packit 577717
			if ( ( ( double ) a[i] - dev[j] ) > ave )
Packit 577717
				s[j]++;
Packit 577717
		}
Packit 577717
	}
Packit 577717
}
Packit 577717
Packit 577717
void
Packit 577717
do_dist( long long *a, long long min, long long max, int bins, int *d )
Packit 577717
{
Packit 577717
	int i, j;
Packit 577717
	int dmax = 0;
Packit 577717
	int range = ( int ) ( max - min + 1 );	/* avoid edge conditions */
Packit 577717
Packit 577717
	/* clear the distribution array */
Packit 577717
	for ( i = 0; i < bins; i++ ) {
Packit 577717
		d[i] = 0;
Packit 577717
	}
Packit 577717
Packit 577717
	/* scan the array to distribute cost per bin */
Packit 577717
	for ( i = 0; i < num_iters; i++ ) {
Packit 577717
		j = ( ( int ) ( a[i] - min ) * bins ) / range;
Packit 577717
		d[j]++;
Packit 577717
		if ( j && ( dmax < d[j] ) )
Packit 577717
			dmax = d[j];
Packit 577717
	}
Packit 577717
Packit 577717
	/* scale each bin to a max of 100 */
Packit 577717
	for ( i = 1; i < bins; i++ ) {
Packit 577717
		d[i] = ( d[i] * 100 ) / dmax;
Packit 577717
	}
Packit 577717
}
Packit 577717