samples.c (799B)
1 #include "squiggle_c/squiggle.h" 2 #include "squiggle_c/squiggle_more.h" 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 double cumsum_p0 = 0.6; 7 double cumsum_p1 = 0.8; 8 double cumsum_p2 = 0.9; 9 double cumsum_p3 = 1.0; 10 11 double sampler_result(uint64_t * seed) 12 { 13 14 double p = sample_uniform(0, 1, seed); 15 if(p< cumsum_p0){ 16 return 0; 17 } else if (p < cumsum_p1){ 18 return 1; 19 } else if (p < cumsum_p2){ 20 return sample_to(1,3, seed); 21 } else { 22 return sample_to(2, 10, seed); 23 } 24 } 25 26 int main() 27 { 28 29 int n_samples = 1000 * 1000, n_threads = 16; 30 double* results = malloc((size_t)n_samples * sizeof(double)); 31 sampler_parallel(sampler_result, results, n_threads, n_samples); 32 printf("Avg: %f\n", array_sum(results, n_samples) / n_samples); 33 free(results); 34 }