view stat.c @ 141:e1dec4f11831

Plot user interface tweaks
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Wed, 22 Jan 2014 14:45:22 +0100
parents e04123ab79ef
children be87c8e78266
line wrap: on
line source

#include <ansi_c.h>
#include "stat.h"

void stat_zero(struct stat *s)
{
	s->samples = 0;
	s->mean = 0.0;
	s->slope = 0.0;
	s->previous = 0.0;
}


void stat_accumulate(struct stat *s, double value)
{
	s->samples += 1;
	
	if (s->samples > 1)
		s->slope = (s->slope * (s->samples - 2) + 6 * (value - s->mean) / s->samples) / (s->samples + 1);
					
	s->mean = ((s->samples - 1) * s->mean + value) / s->samples;
	
	s->previous = value;
}


void rollmean_zero(struct rollmean *s)
{
	s->nobs = 0;
	s->mean = 0.0;
	s->acc = 0.0;
	memset(s->prev, 0, sizeof(s->prev));
}


void rollmean_accumulate(struct rollmean *s, double value)
{
	s->acc = s->acc + value - s->prev[s->nobs % _ROLLMEAN_WLEN];
	s->prev[s->nobs % _ROLLMEAN_WLEN] = value;
	s->nobs++;
	if (s->nobs < _ROLLMEAN_WLEN)
		s->mean = s->acc / s->nobs;
	else
		s->mean = s->acc / _ROLLMEAN_WLEN;
}