ref: 4f72cda4acaa92dfaddb29891d86efeea990e030
parent: 2830cd7eb6182eb7bc42e10557a160156649859c
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Dec 18 13:00:45 EST 2016
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().
--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -29,10 +29,6 @@
#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 @@
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);