squiggle.c

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

commit 279fb12dee25956fa6b9b4924131c11c235e868e
parent 6199e43ae4f8affe3850086a1582162f3621cc07
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Mon, 29 Jan 2024 18:20:55 +0100

new pattern: define sampler and then sample from it

Diffstat:
Mexamples/core/01_one_sample/example.c | 43++++++++++++++++---------------------------
1 file changed, 16 insertions(+), 27 deletions(-)

diff --git a/examples/core/01_one_sample/example.c b/examples/core/01_one_sample/example.c @@ -3,33 +3,13 @@ #include <stdlib.h> // Estimate functions -double sample_0(uint64_t* seed) -{ - UNUSED(seed); - return 0; -} - -double sample_1(uint64_t* seed) -{ - UNUSED(seed); - return 1; -} -double sample_few(uint64_t* seed) -{ - return sample_to(1, 3, seed); -} +double sample_model(uint64_t* seed){ -double sample_many(uint64_t* seed) -{ - return sample_to(2, 10, seed); -} - -int main() -{ - // set randomness seed - uint64_t* seed = malloc(sizeof(uint64_t)); - *seed = 1000; // xorshift can't start with 0 + double sample_0(uint64_t* seed) { UNUSED(seed); return 0; } + double sample_1(uint64_t* seed) { UNUSED(seed); return 1; } + double sample_few(uint64_t* seed) { return sample_to(1, 3, seed); } + double sample_many(uint64_t* seed) { return sample_to(2, 10, seed); } double p_a = 0.8; double p_b = 0.5; @@ -38,8 +18,17 @@ int main() int n_dists = 4; double weights[] = { 1 - p_c, p_c / 2, p_c / 4, p_c / 4 }; double (*samplers[])(uint64_t*) = { sample_0, sample_1, sample_few, sample_many }; + double result = sample_mixture(samplers, weights, n_dists, seed); + + return result; +} + +int main() +{ + // set randomness seed + uint64_t* seed = malloc(sizeof(uint64_t)); + *seed = 1000; // xorshift can't start with 0 - double result_one = sample_mixture(samplers, weights, n_dists, seed); - printf("result_one: %f\n", result_one); + printf("result_one: %f\n", sample_model(seed)); free(seed); }