.. _program_listing_file_include_cmb_datasummary.h: Program Listing for File cmb_datasummary.h ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/cmb_datasummary.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: c #ifndef CIMBA_CMB_DATASUMMARY_H #define CIMBA_CMB_DATASUMMARY_H #include #include #include #include #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 */