giovedì 14 maggio 2009

Ma si tratta davvero di random ?

Nel framework esiste la comoda classe Random... che a volte va a volte no.
Se fate qualche prova vi renderete conto che non sempre funziona a dovere, questo perchè "ptrebbe essere troppo veloce" o "troppo breve la latenza" fra una generazione e l'altra.

Osservate questo codice che cosa genera.



Qualcosa non convince...


Gli elementi evidenziati sono uguali e questo appare discretamente rischioso.

Mi sono accorto di questo problema utilizzando xna, nella creazione di uno screen saver mi sono accorto che tutti gli elementi generati a caso avevano le stesse coordinate.

I più saccenti potrebbero suggerire lo spostamento di Random r = new Random() all'interno del for e utilizare come seed, o l'indice del for o qualche altro strano valore...

Ma se osservate bene il codice... quelli generati per la terza colonna provengono da un nuova variabile "b"...
E' questo quello che secondo me è grave..


Perchè è questo che si verifica se le metto nel for...

Quindi Random .. random .. proprio no direi !!

1 commento:

Anonimo ha detto...

Potresti utilizzare un unica istanza della classe Random per tutti i cicli, otterresti migliori performance e maggiore casualità (anche se di casuale c'è solo il tempo in cui viene istanziato Random la prima volta)