From 4f72cda4acaa92dfaddb29891d86efeea990e030 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 18 Dec 2016 18:00:45 +0100 Subject: awk: improve random number generation don't use rand() and scale it to 0..1, instead call native frand() which produces uniform random number. instead of seeding the rng with time(0), use truerand(). --- sys/src/cmd/awk/run.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'sys/src/cmd/awk') diff --git a/sys/src/cmd/awk/run.c b/sys/src/cmd/awk/run.c index 6627f661c..213fb25ba 100644 --- a/sys/src/cmd/awk/run.c +++ b/sys/src/cmd/awk/run.c @@ -29,10 +29,6 @@ THIS SOFTWARE. #include "awk.h" #include "y.tab.h" -#ifndef RAND_MAX -#define RAND_MAX 32767 /* all that ansi guarantees */ -#endif - jmp_buf env; extern int pairstack[]; @@ -1582,12 +1578,11 @@ Cell *bltin(Node **a, int) /* builtin functions. a[0] is type, a[1] is arg list u = (Awkfloat) system(getsval(x)); break; case FRAND: - /* in principle, rand() returns something in 0..RAND_MAX */ - u = (Awkfloat) (rand() % RAND_MAX) / RAND_MAX; + u = frand(); break; case FSRAND: if (isrec(x)) /* no argument provided */ - u = time(nil); + u = (Awkfloat) (truerand() >> 1); else u = getfval(x); srand((unsigned int) u); -- cgit v1.2.3