time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

commit da9a10791fdda25a22bd6d2700497c2495a7bd32
parent 76968afc790ff0235358840f2c4f4789381c8ec3
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sun, 21 May 2023 01:22:02 -0400

feat: add the actual model

Diffstat:
Mwip/nim/makefile | 9+++++++++
Mwip/nim/samples | 0
Mwip/nim/samples.nim | 17+++++++++++++++++
3 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/wip/nim/makefile b/wip/nim/makefile @@ -1,2 +1,11 @@ +SHELL := /bin/bash + build: samples.nim nim c --verbosity:0 samples.nim + +run: samples + ./samples --verbosity:0 + +examine: samples + # nim c --verbosity:0 --opt:speed -d:release -d:danger --checks:off samples.nim && time ./samples --verbosity:0 --checks:off + nim c -d:release samples.nim && time ./samples diff --git a/wip/nim/samples b/wip/nim/samples Binary files differ. diff --git a/wip/nim/samples.nim b/wip/nim/samples.nim @@ -126,3 +126,20 @@ proc mixture(sxs: seq[seq[float]], ps: seq[float], n: int): seq[float] = return toSeq(1..n).map(_ => get_mixture_sample()) +## Actual model + +let n = 1000000 + +let p_a = 0.8 +let p_b = 0.5 +let p_c = p_a * p_b + +let weights = @[ 1.0 - p_c, p_c/2.0, p_c/4.0, p_c/4.0 ] + +let fs = [ () => 0.0, () => 1.0, () => to(1.0, 3.0), () => to(2.0, 10.0) ] +let dists = fs.map(f => make_samples(f, n)) +let result = mixture(dists, weights, n) +let mean_result = foldl(result, a + b, 0.0) / float(result.len) + +# echo result +echo mean_result