Recentemente in lista si è discusso sulla effettiva casualità dei numeri “random” generati dal QL dall’istruzione RND.
Diversamente da quanto avviene sullo ZX Spectrum, la cui omonima funzione non genererà mai alcuni valori, sul QL sembra che effettivamente i numeri siano davvero casuali.
Con un semplice programmino di 3 righe lo mettiamo alla prova:
REPeat CR_POINTS
POINT RND(255),RND(255)
END REPeat
Tale programma ha il compito di disegnare dei punti a caso e pertanto il rettangolo dello schermo dovrebbe dopo un po’ riempirsi completamente di punti.
Da una prima occhiata sembra che davvero alcune zone siano del tutto improbabili dato che sono presenti “buchi” e righe dove il QL non andrà mai a disegnare il punto. In realtà il programma proposto non è completo in quanto oltre al comando POINT esistono altri comandi e metodi per disegnare dei punti sul QL: PLOT (da caricare, non nativo Qdos) e BLOCK. Un utente della lista (“CRX”) ha analizzato il problema ed ha effettuato i test con i tre comandi e con l’aggiunta del colore. Si ottengono dei risultati differenti.
100 REMark *** CASUALITA' *** 110 REMark ~~~~~~~~~~~~~~~~~~ 120 MODE 8: PAPER 0 130 WINDOW 512,256,0,0: CLS 140 INK 5: CSIZE 0,1: CURSOR 77,130: PRINT "Point Block Plot" 150 : 160 FOR points=1 TO 3000 170 POINT RND(22 TO 40),RND(60 TO 80) 180 INK RND(1 TO 7) 190 END FOR points 200 : 210 FOR blocks=1 TO 5000 220 BLOCK 2,1,RND(218 TO 280),RND(50 TO 100),RND(1 TO 7) 230 END FOR blocks 240 : 250 REMark ** Richiede PLOT & DRAW ** 260 REMark ~~~~~~~~~~~~~~~~~~~~~~~~~~ 270 : 280 FOR plots=1 TO 5000 290 PLOT RND(350 TO 410),RND(50 TO 100) 300 INK RND(1 TO 7) 310 END FOR plots
In tutti i casi POINT non riempie mai il rettangolo ma dispone i pixel su una sorta di griglia, sia su QL reale che su emulatore. Con le rom Minerva recenti i colori appaiono tutt’altro che casuali. Con Minerva meno recente e con JS invece tutto appare più casuale ma… aguzzando la vista si nota che i pixel sono disposti esattamente nello stesso modo e con i medesimi colori. Dato che l’orologio interno del QL base non dispone di batteria tampone esso si resetta ad ogni accensione; perciò la funzionalità di RND, che è data da un conteggio in frazioni di secondo dal momento in cui il QL viene acceso, può essere modificata con lo statement RANDOMISE.
Per esempio, facendo:
RANDOMISE DATE
si ottengono subito rettangoli dall’aspetto molto più casuale, senza l’effetto arcobaleno.
Per quanto riguarda i buchi che si notano con il POINT rispetto agli altri comandi, in realtà sono dovuti al fatto che POINT, a differenza di BLOCK e PLOT, usa le coordinate grafiche e non pixels. Quindi necessita anche di coordinate con valori frazionati (POINT 3.5,8.5) per poter accendere tutti i pixel, mentre RND fornisce solo numeri interi.
Photo: red numbers by DaveBleasdale / CC BY / Blurred from original