squiggle.c

Self-contained Monte Carlo estimation in C99
Log | Files | Refs | README

example.c (857B)


      1 #include "../../../squiggle.h"
      2 #include "../../../squiggle_more.h"
      3 #include <stdio.h>
      4 #include <stdlib.h>
      5 
      6 double sample_model(uint64_t * seed)
      7 {
      8     return sample_lognormal(0, 10, seed);
      9 }
     10 // Estimate functions
     11 int main()
     12 {
     13     // set randomness seed
     14     // uint64_t* seed = malloc(sizeof(uint64_t));
     15     // *seed = 1000; // xorshift can't start with 0
     16     // ^ not necessary, because sampler_parallel takes care of the seed.
     17 
     18     int n_samples = 1000 * 1000 * 1000;
     19     int n_threads = 16;
     20     double* results = malloc((size_t)n_samples * sizeof(double));
     21 
     22     sampler_parallel(sample_model, results, n_threads, n_samples);
     23     double avg = array_sum(results, n_samples) / n_samples;
     24     printf("Average of 1B lognormal(0,10): %f\n", avg);
     25 
     26     free(results);
     27 
     28     // free(seed);
     29     // ^ not necessary, because sampler_parallel takes care of the seed.
     30 }