2010/1/5 Enrico Franchi <enrico.fran...@gmail.com>:
>
> On Jan 5, 2010, at 11:35 AM, Stefano Dal Pra wrote:
>
>> Propongo anche questa variante:
>>
>> import random
>> random.randint(0,9) | 1
>>
>> il | 1 setta a uno il bit meno significativo, rendendolo dispari se non lo 
>> e'.
>> E' importante che gli estremi passati a randint siano: pari quello inferiore
>> e dispari quello superiore, altrimenti i risultati non sarebbero tutti
>> equiprobabili.
>

> Perche' giocare con i bit quando Python offre direttamente costrutti con la 
> semantica voluta?

Perche' quella e' pura e semplice sintassi python, quindi legittima.
Poi per motivi di efficienza:
l'interprete, se non e' scemo, dovrebbe tradurre il | 1 con una
singola istruzione macchina (or bit a bit). Se  devi generare un
dispari e via, ok. Se ne devi fare moltissimi e piu' rapidamente
possibile, il discorso cambia.

Per non giocare con i bit uno puo' fare randint(0,4) * 2 + 1 e ottiene
i dispari tra 1 e 9, tanto equiprobabili quanto randint(0,4).
Nel caso di randint(0,9) | 1 , ogni risultato ha esattamente due
possibilita' di uscire: era il pari immediatamente superiore a cui si
e' aggiunto 1, oppure era direttamente dispari, e non e' cambiato.

Stefano



>
> Per inciso, trasformare numeri pseudo-casuali e' in generale un'operazione 
> piuttosto rischiosa, in quanto si puo' andare ad influire negativamente sulla 
> qualita' della sequenza generata. Nell'esempio probabilmente non ci sono 
> problemi, visto che il generatore sotto Python e' un Mersenne Twister di 
> altissima qualita' e "dovrebbe" reggere bene ad una cosa del genere. *Ma* ci 
> vorrebbe una qualche dimostrazione.
>
> Ora, nel caso probabilmente non interessa. Tuttavia *in genere* le sequenze 
> pseudo-casuali sono bestie abbastanza delicate.
>
>
> _______________________________________________
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a