From c0a7b53baf2a6e7bf9bc1fbec7ac05e43ac59154 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Wed, 8 Sep 2021 15:51:40 -0700 Subject: checkin --- sys/libn/random.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'sys/libn/random.c') diff --git a/sys/libn/random.c b/sys/libn/random.c index 558641e..551d1e9 100644 --- a/sys/libn/random.c +++ b/sys/libn/random.c @@ -1,4 +1,5 @@ #include +#include // ---------------------------------------------------------------------------- // Internal structure @@ -66,12 +67,29 @@ rng·init(uint64 seed) /* Returns a random float64 between 0 and 1 */ double -rng·random() +rng·random(void) { uint64 r = xoshiro256ss(&RNG); return (double)r / (double)UINT64_MAX; } +double +rng·exponential(double lambda) +{ + double f; + + f = rng·random(); + return -log(1 - f)/lambda; +} + +double +rng·normal(void) +{ + double f; + f = rng·random(); + +} + /* Returns true or false on success of trial */ bool rng·bernoulli(double f) @@ -88,3 +106,18 @@ rng·randi(int max) uint64 r = xoshiro256ss(&RNG); return r % max; } + +uint64 +rng·poisson(double mean) +{ + uint64 n; + double c; + + if(mean<10.0) { + for(n=0, c=rng·exponential(1.0); c