time-to-botec

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

commit fb21e4baa6a17d3edfc625be6059c806591da7a8
parent 23bd623b6630121b2e99c693ced37ded1e236998
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sat, 14 Oct 2023 23:48:11 +0100

savepoint while wrangling types

Diffstat:
Mocaml/out/samples | 0
Mocaml/out/samples.cmi | 0
Mocaml/out/samples.cmx | 0
Mocaml/out/samples.o | 0
Mocaml/samples.ml | 16++++++++++++++--
5 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/ocaml/out/samples b/ocaml/out/samples Binary files differ. diff --git a/ocaml/out/samples.cmi b/ocaml/out/samples.cmi Binary files differ. diff --git a/ocaml/out/samples.cmx b/ocaml/out/samples.cmx Binary files differ. diff --git a/ocaml/out/samples.o b/ocaml/out/samples.o Binary files differ. diff --git a/ocaml/samples.ml b/ocaml/samples.ml @@ -13,6 +13,13 @@ let cumsumXs xs = new_sum, ys @ [new_sum] ) (0.0, []) xs in cum_sum +let findIndex xs test = + let rec recursiveHelper ys i = + match ys with + | [] -> None + | z :: zs -> if test z then Some i else recursiveHelper zs (i+1) + in + recursiveHelper xs 0 (* Basic samplers *) let sampleZeroToOne () : float = Random.float 1.0 @@ -40,8 +47,13 @@ let mixture (samplers: (unit -> float) array) (weights: float array) = | true -> let normalized_weights = normalizeXs weights in let cumsummed_normalized_weights = cumsumXs normalized_weights in - let answer = 1.1 in - Some(1.0) + let p = sampleZeroToOne () in + let chosenSamplerIndex = findIndex cumsummed_normalized_weights (fun x -> x < p) in + let sample = match chosenSamplerIndex with + | None -> None + | Some(i) -> Some(1.0) (* (samplers.(i) ()) |> Some *) + in + sample let () = Random.init 1;