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