From 83b4028c95020d1d06806653646738d360b6cfda Mon Sep 17 00:00:00 2001 From: Renaud Fivet Date: Thu, 22 Oct 2015 16:57:56 +0800 Subject: [PATCH] Avoid 176719 periodicity of &rnd 0. --- eval.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/eval.c b/eval.c index 446e02a..ee77424 100644 --- a/eval.c +++ b/eval.c @@ -537,11 +537,11 @@ static char *gtfun( char *fname) { retstr = result ; break ; case UFRND | MONAMIC: - sz = abs( atoi( arg1)) ; + sz = atoi( arg1) ; if( sz == 0) sz = ernd() ; else - sz = ernd() % sz + 1 ; + sz = ernd() % abs( sz) + 1 ; retstr = i_to_a( sz) ; break ; @@ -1323,8 +1323,9 @@ int abs(int x) * returns a random integer */ static int ernd( void) { - seed = abs(seed * 1721 + 10007); - return seed; + seed = seed * 1721 + 10007 ; + seed &= ~(1 << 31) ; /* abs() introduces 176719 periodicity */ + return seed ; } /*