Spectrum e i numeri casuali

Q ualcuno forse si ricorderà del problema della generazione dei numeri pseudocasuali nei vecchi home computer.

La funzione Basic che si occupava di questo problema era la RND. Questa funzione restituiva un valore numerico.

Uno dei giochi più semplici, e più banali, era sicuramente “pensa un numero…”. Per realizzare questo semplice gioco si utilizzava un generatore di numeri pseudocasuali, si chiamano così perché il computer generava sempre la medesima sequenza di numeri casuali.

Tutti gli home computer, o meglio tutte le versioni degli interpreti Basic, disponevano di una funzione del genere. Infatti, in Basic questa operazione veniva svolta con la funzione RND.

I numeri prodotti erano ottenuti in forma frazionaria compresi tra 0 e 0,99999.

Ad esempio, con uno Spectrum si utilizzava la forma seguente:

10 LET A = RND
20 PRINT A
30 GOTO 10

Invece, su un Tendy o un Acorn:

10 LET A = RND(0)
20 PRINT A
30 GOTO 10

Il programma era, di solito, preceduto da un comando NEW che, in Basic, permetteva di ripulire la memoria da informazioni preesistenti.

Occorreva poi utilizzare il comando RUN per mettere in esecuzione il giochino. Questo programma produceva in uscita una sequenza di numeri frazionari di difficile lettura.

Per ovviare a questo problema si faceva ricorso alla funzione INT del Basic: con INT il valore veniva troncato per ottenere una parte intera. Così, su uno Spectrum si utilizzava la seguente sintassi per ottenere un numero compreso tra 0 e 5:

10 LET A = INT (RND * 6)

Di conseguenza la sintassi da utilizzare per generare un numero compreso dall’intervallo dei valori seguenti era del tipo:

tra 0 e 0,9999 RND
tra 0 e n*0,9 RND *n
tra -10 e + 10 INT(RND*21)-10
tra 0 e 10 INT (RND * 11)
tra 1 e 80 INT (RND * 80) +1

Ogni modello utilizzato aveva una sua particolare sintassi perché l’interprete Basic era diverso: non esisteva un interprete Basic standard.

Così, utilizzando un Acorn o un Tendy:

tra 0 e 0,9999 RND(0)
tra 0 e n*0,9 RND(0) *n
tra -10 e + 10 INT(RND*21)-11