[zxspectrum] Re: Funzione RND
- From: Paolo Ferraris <pieffe8@xxxxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Sun, 02 Oct 2005 16:52:17 -0500
Stefano wrote:
Si`, ma usare un array e un bel ciclo FOR no, eh? ;-)
Questo lo posso confermare da un punto di vista matematico: dopo 65536
????? perche'????
E` basato su come funziona l'algoritmo RND.
Ricalcola il seed (da 0 a 65535) con la seguente funzione matematica:
seed := (((seed + 1) * 75) % 65537) - 1
dopodiche` RND ritorna il seed/65536.
L'esatto motivo perche` tutti i valori sono coperti da 65536 iterazioni
e` molto complicato da spiegare dal punto di vista matematico. Potete
comunque facilmente verificarlo scrivendo un programmino in C che simuli
tutte le iterazioni e notando che per esempio se il seed parte da 0
ritornera` a 0 dopo appunto 65536 iterazioni.
Comunque, EMG, forse non dovrei neanche accennarlo, ma usi l'istruzione
RANDOMIZE? E se usi un emulatore e` meglio precederlo da un PAUSE.
anche qui... perche'??? :)
Perche` ogni volta che accendi il computer il seed ha valore 0, e se non
viene cambiato con un RANDOMIZE la sequenza dei numeri casuali che
ottieni con RND e` sempre la stessa.
Sugli emulatori c'e` inoltre il problema dell'autoload. Se non si genera
un ritardo "random" ottenuto nello scrivere LOAD"" o premere ENTER al
menu del 128k il comando RANDOMIZE vienr sempre eseguito allo stesso
istante. Questo e` un problema visto che RANDOMIZE inizializza il seed
con il valore del timer. Se si chiede all'utente di premere un tasto e
poi si usa RANDOMIZE il problema e` risolto.
Ciao
Paolo
Other related posts: