time-to-botec

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

commit 2d5378fd534321d11ca5ec22804210860d2c6833
parent 37a2dab610e9501d16c8fb194038779d55d45949
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Sun, 15 Oct 2023 01:58:03 +0100

tweak: in ocaml, do the unwinding and the sum at the same time

Diffstat:
Mocaml/out/samples | 0
Mocaml/out/samples.cmi | 0
Mocaml/out/samples.cmx | 0
Mocaml/out/samples.o | 0
Mocaml/samples.ml | 15++++++++++++---
5 files changed, 12 insertions(+), 3 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 @@ -54,6 +54,15 @@ let unwind xs = ) *) +let unwindSum xs = + let rec tailRecursiveHelper ys sum = + match ys with + | [] -> Ok(sum) + | Error e :: _ -> Error e + | Ok(y) :: ys -> tailRecursiveHelper ys (y +. sum) + in + tailRecursiveHelper xs 0.0 + (* Basic samplers *) let sampleZeroToOne () : float = Random.float 1.0 @@ -104,9 +113,9 @@ let () = let sampler () = mixture [ sample0; sample1; sampleFew; sampleMany ] weights in let n = 1_000_000 in let samples = List.init n (fun _ -> sampler ()) in - match unwind samples with + match unwindSum samples with | Error err -> Printf.printf "Error %s\n" err - | Ok(xs) -> ( - let mean = sumFloats xs /. float_of_int(n) in + | Ok(sum) -> ( + let mean = sum /. float_of_int(n) in Printf.printf "Mean: %f\n" mean )