commit 05d89b5c05bdf3be8f6fd3c6d195672f1e10d13e
parent fe5c41fb8a0e1d4f130437b22667bf699851b17a
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Wed, 30 Dec 1998 15:21:56 -0200
new option for function "random": random(a,b) returns a<=x<=b
Diffstat:
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git 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);
+ }
}