Program Listing for File cmb_datasummary.h
↰ Return to documentation for file (include/cmb_datasummary.h)
#ifndef CIMBA_CMB_DATASUMMARY_H
#define CIMBA_CMB_DATASUMMARY_H
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include "cmb_assert.h"
#include "cmi_memutils.h"
struct cmb_datasummary {
uint64_t cookie;
uint64_t count;
double min;
double max;
double m1;
double m2;
double m3;
double m4;
};
extern struct cmb_datasummary *cmb_datasummary_create(void);
extern void cmb_datasummary_destroy(struct cmb_datasummary *dsp);
extern void cmb_datasummary_initialize(struct cmb_datasummary *dsp);
extern void cmb_datasummary_reset(struct cmb_datasummary *dsp);
extern void cmb_datasummary_terminate(struct cmb_datasummary *dsp);
extern uint64_t cmb_datasummary_add(struct cmb_datasummary *dsp, double y);
extern uint64_t cmb_datasummary_merge(struct cmb_datasummary *tgt,
const struct cmb_datasummary *dsp1,
const struct cmb_datasummary *dsp2);
[[maybe_unused]]
static inline uint64_t cmb_datasummary_count(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
return dsp->count;
}
[[maybe_unused]]
static inline double cmb_datasummary_max(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
return dsp->max;
}
[[maybe_unused]]
static inline double cmb_datasummary_min(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
return dsp->min;
}
[[maybe_unused]]
static inline double cmb_datasummary_mean(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
return dsp->m1;
}
[[maybe_unused]]
static inline double cmb_datasummary_variance(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
double r = 0.0;
if (dsp->count > 1) {
r = dsp->m2 / (double)(dsp->count - 1u);
}
cmb_assert_debug(r >= 0.0);
return r;
}
[[maybe_unused]]
static inline double cmb_datasummary_stddev(const struct cmb_datasummary *dsp)
{
cmb_assert_release(dsp != NULL);
cmb_assert_release(dsp->cookie == CMI_INITIALIZED);
return sqrt(cmb_datasummary_variance(dsp));
}
extern double cmb_datasummary_skewness(const struct cmb_datasummary *dsp);
extern double cmb_datasummary_kurtosis(const struct cmb_datasummary *dsp);
extern void cmb_datasummary_print(const struct cmb_datasummary *dsp,
FILE *fp,
bool lead_ins);
#endif /* CIMBA_CMB_DATASUMMARY_H */