[zxspectrum] Re: Numeri casuali

  • From: "Stefano" <flydream@xxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Mon, 7 Jul 2008 18:57:46 +0200

grazie della precisazione. L'articolo ("ovviamente") l'ho scritto io. Suppongo 
per lo stesso motivo se nel mio programma avessi messo il randomize tra i 2 rnd 
ricordo che diede 2 soli pixel come se i numeri casuali fossero solo 2. In 
effetti il problema si ovvia con un solo RND avrei anche potuto fare:
5 for a=0 to 1
10 casuale=int rnd*255
20 if a=0 then ascissa=casuale
21 if a=1 then if casuale>175 then go to 10
22 if a=1 then ordinata=casuale
30 plot ascissa,ordinata
40 next a
l'ho fatto al volo non so se sia corretta
  ----- Original Message ----- 
  From: Matteo Vitturi 
  To: zxspectrum@xxxxxxxxxxxxx 
  Sent: Monday, July 07, 2008 6:06 PM
  Subject: [zxspectrum] Numeri casuali


  Salve a tutti. Il mio "rientro" nasce da un'osservazione che espongo di 
seguito, ma confido di rimanere ancora a lungo qui, grazie.

  Stavo leggendo con interesse l'articolo sulla funzione generatore di numeri 
casuali RND apparso sul n.12 di "sinclair zx notizie" 
(http://zxspectrum.altervista.org/notizie.htm).

  La conclusione dell'articolo accenna all'esistenza di "buchi" di probabilità, 
ma il comportamento descritto deriva dal fatto di usare due chiamate RND in 
sequenza per comporre le coordinate x e y da passare a PLOT. In realtà il 
"pattern" che viene mostrato a video è dovuto alla limitatezza dell'algoritmo 
insito nella RND dello Spectrum che, senza entrare in dettagli tecnici, 
semplicemente produce una serie ciclica di 65536 numeri che sono 
sufficientemente ben distribuiti da sembrare casuali ad un occhio disattento.

  Il seguente programma vuole dimostrare la ciclicità di RND. Lo schermo viene 
annerito del tutto, senza lasciare puntini spenti per poi tornare completamente 
bianco (usando OVER 1).

  Mentre il programma gira, l'occhio non è in grado di individuare un "pattern" 
che si ripeta: questo è il grado di "casualità" dei numeri prodotti da RND che 
lo Spectrum è in grado di generare.

     5 LET c=0
     6 OVER 1
    10 LET r=INT (RND*65536)
    11 LET c=c+1
    12 IF c>65536*2 THEN STOP
    13 PRINT#0;AT 0,0;c
    14 IF c=65536 THEN PAUSE 100
    15 LET y=INT (r/256)
    20 LET x=r-256*y
    25 IF y>175 THEN GO TO 10
    30 PLOT x,y
    40 GO TO 10

  n.b. la IF y>175 a riga 25 serve solo per non bloccare il programma con una 
coordinata fuori schermo; invertendo la condizione e sottraendo 176 alla riga 
30, si può osservare il medesimo comportamento anche per la parte non visibile.

  Commenti?

  Mat.

------------------------------------------------------------------------------
  Doretta Doretta ti "cerca"! Vieni a trovarla sul suo Spaces! 

Other related posts: