Skip to content

Instantly share code, notes, and snippets.

@seaneshbaugh
Created August 26, 2020 21:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seaneshbaugh/44710706fbf8c7517395ece977724467 to your computer and use it in GitHub Desktop.
Save seaneshbaugh/44710706fbf8c7517395ece977724467 to your computer and use it in GitHub Desktop.
running-average.c
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
struct running_average {
float average;
uint32_t count;
} typedef running_average;
void initialize(running_average* ra) {
ra->average = 0;
ra->count = 0;
}
void update(running_average* ra, const uint32_t x) {
if (ra->count == 0) {
ra->average = x;
ra->count = 1;
return;
}
ra->count += 1;
float a = (float)x / (float)ra->count;
float b = ra->average + a;
ra->average = b - (ra->average / (float)ra->count);
}
int main(int argc, char** argv) {
running_average ra;
initialize(&ra);
// for (int i = 0; i < 1000; i += 1) {
// uint32_t x = arc4random();
printf("%zu\n", sizeof(float));
// update(&ra, x);
update(&ra, 0xffffffff);
printf("x = %u, %f\n", 0xffffffff, ra.average);
update(&ra, 0xffffffff);
printf("x = %u, %f\n", 0xffffffff, ra.average);
update(&ra, 0xffffffff);
printf("x = %u, %f\n", 0xffffffff, ra.average);
update(&ra, 1);
printf("x = %u, %f\n", 1, ra.average);
update(&ra, 0x0fffffff);
printf("x = %u, %f\n", 0x0fffffff, ra.average);
update(&ra, 0xffffffff);
printf("x = %u, %f\n", 0xffffffff, ra.average);
// printf("x = %u, new average = %f\n", x, ra.average);
// }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment