From 05d89b5c05bdf3be8f6fd3c6d195672f1e10d13e Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 30 Dec 1998 15:22:17 -0200 Subject: new option for function "random": random(a,b) returns a<=x<=b --- lmathlib.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lmathlib.c b/lmathlib.c index 1d99df32..63a9c1f9 100644 --- a/lmathlib.c +++ b/lmathlib.c @@ -1,5 +1,5 @@ /* -** $Id: lmathlib.c,v 1.11 1998/09/08 19:25:35 roberto Exp roberto $ +** $Id: lmathlib.c,v 1.12 1998/12/28 13:44:54 roberto Exp roberto $ ** Lua standard mathematical library ** See Copyright Notice in lua.h */ @@ -153,16 +153,22 @@ static void math_max (void) } -static void math_random (void) -{ - /* the '%' is needed because on some systems (SunOS!) "rand()" may */ - /* return a value bigger than RAND_MAX... */ - double r = (double)(rand()%RAND_MAX) / (double)RAND_MAX; - double l = luaL_opt_number(1, 0); +static void math_random (void) { + /* the '%' is needed because on some systems (SunOS!) "rand()" may + return a value bigger than RAND_MAX... */ + double r = (double)(rand()%RAND_MAX) / ((double)RAND_MAX+1.0); + int l = luaL_opt_int(1, 0); if (l == 0) lua_pushnumber(r); - else - lua_pushnumber((int)(r*l)+1); + else { + int u = luaL_opt_int(2, 0); + if (u == 0) { + u = l; + l = 1; + } + luaL_arg_check(l<=u, 1, "interval is empty"); + lua_pushnumber((int)(r*(u-l+1))+l); + } } -- cgit v1.2.3-55-g6feb