time-to-botec

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

commit 06438c522d03a3ff2ade9e2a339674479af02030
parent 14e298c3c95d2e7c9471abd81fb5a925e695b161
Author: NunoSempere <nuno.sempere@protonmail.com>
Date:   Fri, 16 Feb 2024 14:40:54 +0100

go: add slices manually

Diffstat:
Mgo/notes.md | 5+++--
Mgo/squiggle.go | 32++++++++++++++++++++++++++++++--
2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/go/notes.md b/go/notes.md @@ -2,6 +2,7 @@ - [x] Look into randomness sources in go - rand/v2 api: <https://pkg.go.dev/math/rand/v2> - [x] Test with a million samples of a simple lognormal, just to get a sense of speed -- [ ] Add mixture distribution +- [x] Add mixture distribution +- [x] Anonymous functions for nested: https://stackoverflow.com/questions/74523441/nested-functions-in-o - [ ] Look into go routines for filling up an array. -- [ ] Anonymous functions for nested: https://stackoverflow.com/questions/74523441/nested-functions-in-o + - Mhh, it's different from threads. diff --git a/go/squiggle.go b/go/squiggle.go @@ -84,6 +84,12 @@ func sample_mixture(fs []func64, weights []float64) float64 { } +func slice_fill(xs []float64, fs func64) { + for i := range xs { + xs[i] = fs() + } +} + func main() { var p_a float64 = 0.8 var p_b float64 = 0.5 @@ -97,11 +103,33 @@ func main() { fs := [4](func64){sample_0, sample_1, sample_few, sample_many} var n_samples int = 1_000_000 + var xs = make([]float64, n_samples) + + var xs0 = xs[0:250_000] + var xs1 = xs[250_000:500_000] + var xs2 = xs[500_000:750_000] + var xs3 = xs[750_000:1_000_000] + + model := func() float64 { return sample_mixture(fs[0:], ws[0:]) } + slice_fill(xs0, model) + slice_fill(xs1, model) + slice_fill(xs2, model) + slice_fill(xs3, model) + var avg float64 = 0 - for i := 0; i < n_samples; i++ { - avg += sample_mixture(fs[0:], ws[0:]) + for _, x := range xs { + avg += x } avg = avg / float64(n_samples) fmt.Printf("Average: %v\n", avg) + /* + + var avg float64 = 0 + for i := 0; i < n_samples; i++ { + avg += sample_mixture(fs[0:], ws[0:]) + } + avg = avg / float64(n_samples) + fmt.Printf("Average: %v\n", avg) + */ }