Re: easy question about random numbers

*To*: mathgroup at smc.vnet.net*Subject*: [mg53396] Re: [mg53382] easy question about random numbers*From*: Pedrito <pedrito6 at softhome.net>*Date*: Sun, 9 Jan 2005 23:03:57 -0500 (EST)*References*: <200501090402.XAA12446@smc.vnet.net> <opskbs88l9iz9bcq@monster.ma.dl.cox.net>*Sender*: owner-wri-mathgroup at wolfram.com

Thanks for helping me, Bobby. I have been trying the differents methods for creating random numbers and I think the faster are these two: -------------- First method li2 = {1/6, 1/6, 1/6, 1/6, 9/60, 11/60}; li4 = Rationalize[li2 LCM @@ Denominator[Rationalize[li2]]]; a = Flatten[Table[Table[i, {li4[[i]]}], {i, Length[li4]}]]; And now it's necessary to obtain by hand the length of "a": Length[a] Out[]:=60 Finally, this is the function: (a[[Random[Integer, {1, 60}]]] & )[] -------------- Second method setal[p_] := Block[{n = Length[p], a, b, c, i, j, tol}, a = Range[n]; b = n*p - 1; c = Table[1, {n}]; tol = 2*n*$MachineEpsilon; While[{i, j} = Ordering[b][[{1, -1}]]; b[[j]] > b[[i]] + tol, a[[i]] = j; c[[i]] = 1 + b[[i]]; b[[j]] += b[[i]]; b[[i]] = 0]; {n, a, N[c]}]; p = (#1/Plus @@ #1 & )[Table[Log[Random[]], {6}]]; {n, a, c} = setal[p]; And this is the function: (If[Random[] > c[[#1]], a[[#1]], #1] & )[Random[Integer, {1, n}]] -------------------------------------- But I'm sorry to say that I'm not able of understanding the second method (the "alias" method). What do you think about the first method? Pedrito

**References**:**easy question about random numbers***From:*Pedrito <pedrito6@softhome.net>