Random Numbers
From Erlang Community
| Revision as of 01:47, 25 August 2006 (edit) Cyberlync (Talk | contribs) ← Previous diff |
Current revision (07:32, 24 March 2009) (edit) (undo) Wesley (Talk | contribs) m (random:uniform/1 never returns 0) |
||
| (2 intermediate revisions not shown.) | |||
| Line 5: | Line 5: | ||
| == Solution == | == Solution == | ||
| - | Use random:uniform | + | Use random:uniform/0 and random:uniform/1 ; the first returns a random float uniformly distributed between [0.0,1.1], and the second returns a random integer uniformly distributed between [1,N]. |
| <code> | <code> | ||
| 1> random:uniform(). | 1> random:uniform(). | ||
| - | + | 0.159112 | |
| 2> random:uniform(150). | 2> random:uniform(150). | ||
| 67 | 67 | ||
| </code> | </code> | ||
| - | + | To select random integers from [N,M], can use N+random:uniform(M-N). | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | A common example is generating a random password: | |
| <code> | <code> | ||
| - | + | generate_password(N) -> | |
| - | lists: | + | lists:map(fun (_) -> random:uniform(90)+$\s+1 end, lists:seq(1,N)). |
| - | + | ||
| - | + | ||
| - | + | 3> generate_password(8). | |
| - | " | + | "l?8j#$&&" |
| - | + | 4> generate_password(8). | |
| - | " | + | "V<bFi(EW" |
| - | + | 5> generate_password(8). | |
| - | + | "irp^DXTz" | |
| - | + | ||
| - | " | + | |
| </code> | </code> | ||
| Line 77: | Line 32: | ||
| It can support bigint values, so no special recipe is required for extremely large random numbers. | It can support bigint values, so no special recipe is required for extremely large random numbers. | ||
| - | [[Category:CookBook]] | + | [[Category:CookBook]][[Category:NumberRecipes]] |
Current revision
[edit] Problem
You want a random number from a given range. For example, you wish to randomly select one element from an array, simulate rolling a die in a game of chance, or generate a random password.
[edit] Solution
Use random:uniform/0 and random:uniform/1 ; the first returns a random float uniformly distributed between [0.0,1.1], and the second returns a random integer uniformly distributed between [1,N].
1> random:uniform(). 0.159112 2> random:uniform(150). 67 |
To select random integers from [N,M], can use N+random:uniform(M-N).
A common example is generating a random password:
generate_password(N) ->
lists:map(fun (_) -> random:uniform(90)+$\s+1 end, lists:seq(1,N)).
3> generate_password(8).
"l?8j#$&&"
4> generate_password(8).
"V |
The Erlang random number generator is attributed to B.A. Wichmann and I.D.Hill, in 'An efficient and portable pseudo-random number generator', Journal of Applied Statistics. AS183. 1982. Also Byte March 1987.
It can support bigint values, so no special recipe is required for extremely large random numbers.

Digg It
Del.icio.us
Reddit
Facebook
Stumble Upon
Technorati

