random(X, Y) ->
{A, B, C} = now(),
random:seed(A,B,C),
X-1 + random:uniform(Y-X+1).
2009/5/2 Administrator <gob...@gmail.com>:
I numeri generati dal modulo random non sono *perfettamente* casuali ma
sono pseudo-random: ovvero, sembrano essere generati a casaccio mentre
in realta' si ottengono attraverso degli algoritmi che prendono un dato
come input, lo manipolano piu' e piu' volte attraverso funzioni di hash
e cose simili, quindi generano l'output.
Puoi immaginare che i numeri generati facciano parte di una catena dove
ogni numero viene generato a partire da quello generato immediatamente
prima.
Il seme e' il primo numero della catena e devi inizializzarlo tu. :)
Puoi verificare che, inizializzando la catena sempre con lo stesso seme,
e chiamando piu' volte random:uniform(Bound) un certo numero di volte,
ottieni sempre la stessa sequenza di numeri.
Loris
--
"let me take you down, 'cos i'm going to Strawberry Fields."
-----------------------------------------------------------------
[ Loris Fichera a.k.a. kidA --- HOME http://www.kida.netsons.org ]
[ ICQ UIN: 118833284 skype loris_fichera ]
[ JABBER loris[dot]fichera[at]gmail[dot]com//GPG key ID 179FC4DD ]
[ Fingerprint D546 D632 3057 CCBB DF63 A8EC 6858 7300 179F C4DD ]
Sfortunatamente Erlang ha un generatore di numeri casuali
particolarmente debole: se si usano due valori molto simili come seed,
le sequenze pseudocasuali risultanti sono molto simili tra loro, e
divergono molto lentamente. Se ne è discusso qui
(http://erlang.org/pipermail/erlang-questions/2008-November/subject.html#39756).
-- Daniele
Non solo. A quanto pare basta conoscere uno qualunque dei numeri della
catena per determinare tutti i seguenti:
http://erlang.org/pipermail/erlang-questions/2008-November/039761.html
Diciamo che e' assolutamente sconsigliabile per propositi crittografici! :)
L'algoritmo che viene implementato nel modulo 'random' dovrebbe essere
questo qui:
http://www.eurometros.org/gen_report.php?category=distributions&pkey=21&subform=yes