Browse Source

"random" accepts an 'n' to return between 1 and 'n'.

Roberto Ierusalimschy 28 years ago
parent
commit
caa987faad
2 changed files with 12 additions and 6 deletions
  1. 6 4
      manual.tex
  2. 6 2
      mathlib.c

+ 6 - 4
manual.tex

@@ -1,4 +1,4 @@
-% $Id: manual.tex,v 2.10 1997/07/02 17:09:48 roberto Exp roberto $
+% $Id: manual.tex,v 2.11 1997/07/04 22:35:38 roberto Exp roberto $
 
 \documentstyle[fullpage,11pt,bnf]{article}
 
@@ -38,7 +38,7 @@ Waldemar Celes
 \tecgraf\ --- Computer Science Department --- PUC-Rio
 }
 
-\date{\small \verb$Date: 1997/07/02 17:09:48 $}
+\date{\small \verb$Date: 1997/07/04 22:35:38 $}
 
 \maketitle
 
@@ -2085,8 +2085,10 @@ Both can be used with an unlimited number of arguments.
 The functions \verb|random| and \verb|randomseed| are interfaces to
 the simple random generator functions \verb|rand| and \verb|srand|,
 provided by ANSI C.
-The function \verb|random| returns pseudo-random numbers in the
-range \Math{[0,1)}.
+The function \verb|random|, when called without arguments,
+returns a pseudo-random real number in the range \Math{[0,1)}.
+When called with a number \Math{n},
+returns a pseudo-random integer in the range \Math{[1,n]}.
 
 
 \subsection{I/O Facilities} \label{libio}

+ 6 - 2
mathlib.c

@@ -3,7 +3,7 @@
 ** Mathematics library to LUA
 */
 
-char *rcs_mathlib="$Id: mathlib.c,v 1.24 1997/06/09 17:30:10 roberto Exp roberto $";
+char *rcs_mathlib="$Id: mathlib.c,v 1.25 1997/06/19 18:03:04 roberto Exp roberto $";
 
 #include <stdlib.h>
 #include <math.h>
@@ -171,7 +171,11 @@ static void math_rad (void)
 
 static void math_random (void)
 {
-  lua_pushnumber((double)(rand()%RAND_MAX) / (double)RAND_MAX);
+  double r = (double)(rand()%RAND_MAX) / (double)RAND_MAX;
+  if (lua_getparam(1) == LUA_NOOBJECT)
+    lua_pushnumber(r);
+  else
+    lua_pushnumber((int)(r*luaL_check_number(1)) + 1);
 }
 
 static void math_randomseed (void)