62 lines
1.6 KiB
C
62 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#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;
|
|
} |