#include #include #include "rng.h" #include "rngutil.h" int cmp(const void *a, const void *b) { float af = *(float *) a; float bf = *(float *) b; if (bf - af > 0) { return -1; } else if (bf - af < 0) { return 1; } else { return 0; } } int main() { rng *base = get_rng(8); const size_t n_ns = 4; size_t ns[] = {100, 1000, 10000, 100000}; float **samples = calloc(n_ns * 2, sizeof(float *)); size_t i, j; for (i = 0; i < n_ns; i++) { samples[i * 2] = calloc(ns[i], sizeof(float)); samples[i * 2 + 1] = calloc(ns[i], sizeof(float)); for (j = 0; j < ns[i]; j++) { samples[i * 2][j] = rng_uniform(base, -3, 4); samples[i * 2 + 1][j] = rng_gaussian(base, 0.5, 1.5); } qsort(samples[i * 2], ns[i], sizeof(float), cmp); qsort(samples[i * 2 + 1], ns[i], sizeof(float), cmp); } Interval *interval1 = new_interval(100); Interval *interval2 = new_interval(100); for (i = 0; i < n_ns; i++) { intervalizing(interval1, ns[i], samples[i * 2]); intervalizing(interval2, ns[i], samples[i * 2 + 1]); printf("=== Uniform Distribution #%lu\n", i); print_histogram(interval1, ns[i], samples[i * 2]); printf("=== Gaussian Distribution #%lu\n", i); print_histogram(interval2, ns[i], samples[i * 2 + 1]); } for (j = 0; j < n_ns * 2; j++) { free(samples[j]); } free(samples); free_interval(interval1); free_interval(interval2); free_rng(base); base = NULL; return 0; }