add for hw4
This commit is contained in:
62
hws/hw4/main.c
Normal file
62
hws/hw4/main.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user