numeri random

6 views
Skip to first unread message

Administrator

unread,
May 2, 2009, 11:06:00 AM5/2/09
to Erlang Etna User Group
per ottenere un numero random da x a y ?
la descrizione del modulo non mi è molto chiara

Roberto

unread,
May 2, 2009, 11:19:49 AM5/2/09
to erlan...@googlegroups.com
random:seed/3 inizializza il seme.
random:uniform(N) ti torna un numero tra 1 ed N, quindi:

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>:

freddi301 ji

unread,
May 3, 2009, 5:03:01 AM5/3/09
to erlan...@googlegroups.com
ultima domanda, cosa vuol dire il "seme"

kidA

unread,
May 3, 2009, 5:33:06 AM5/3/09
to erlan...@googlegroups.com
freddi301 ji wrote:
> ultima domanda, cosa vuol dire il "seme"
>

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 ]

Daniele Varrazzo

unread,
May 3, 2009, 11:46:56 AM5/3/09
to erlan...@googlegroups.com
2009/5/3 kidA <loris....@gmail.com>:

>
> freddi301 ji wrote:
>> ultima domanda, cosa vuol dire il "seme"
>>
>
> 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. :)

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

kidA

unread,
May 3, 2009, 11:56:51 AM5/3/09
to erlan...@googlegroups.com

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

Reply all
Reply to author
Forward
0 new messages