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