Sep
19th
left
right

Generazione e simulazione di numeri pseudocasuali

Generazione e simulazione di numeri pseudocasuali

In un precedente articolo apparso su questa testata abbiamo accennato alla generazione e simulazione di numeri pseudocasuali ed alla loro applicazione[1]. Pertanto, prima di continuare, in un prossimo contributo, a descrivere con maggior dettaglio i tipi di simulazione con numeri pseudo casuali[2], ivi accennati, riteniamo utile fare un focus su come, attraverso un codice[3] (per esempio in linguaggio di programmazione “C/C++” – (*)), è possibile generare una sequenza pseudocasuale di numeri a caso.

Il linguaggio di programmazione per generare un sequenza di numeri pseudocasuali

In altri termini, per utilizzare le funzioni di randomizzazione (usate, per esempio, nella criptografia o in algoritmi particolari come l’algoritmo di Montecarlo[4]) nel linguaggio di programmazione C/C++, bisogna, innanzitutto, richiamare nel codice le librerie[5]: time.h, stdlib.h. Infatti in quest’ultima libreria troviamo la funzione di randomizzazione “Srand che permette di generare ogni volta numeri casuali diversi). Invece, come parametro, usiamo la funzione “time” preso dall’altra libreria (si tratta dell’orario del PC).

Esempio (1) di codice per la generazione e simulazione di numeri pseudocasuali

In questo modo abbiamo le prime semplici indicazione per costruire un codice che una volta lanciato il programma genera una sequenza pseudocasuale di numeri:

Innanzitutto l’intestazione (Header):

#include <stdio.h>; <time.h> ; <stdlib.h> ; #define MAX 100

int main () {

int i;

Poi il Titolo:

//Numeri casuali sempre diversi//

Quindi le Istruzioni:

srand (time (NULL)); (funzione di randomizzazione a partire da un dato momento contrassegnato dall’orario del PC.

for (i=0; i<9;i++) { (1 ciclo for)

printf (“%d “, rand() %MAX[6]); //funzione di stampa//

}

printf(“\n\n”); //funzione di stampa, ritorno a capo//

for (i=0; i<9; i++) { //2 ciclo for//

printf (“%d “, rand() %MAX);

}

return 0;

}

In altri termini con questo codice, riportiamo il layout di stampa qui di seguito; un possibile output con 2 righe (perché ho 2 cicli for) con 9 cifre casuali a ciclo scelte tra 0 e 99 è:

3             34           7             4             7             48           22           72           15

34           44           2             4             7             81           22           71           18


Esempio (2) di codice per la generazione e simulazione di numeri pseudocasuali (effetto matrix)

Oppure scriviamo un altro codice che simula un sequenza di soli 1 e 0:

Innanzitutto l’intestazione (Header):

#include <stdio.h>; <time.h> ; <stdlib.h>

int main () {

int i;

Poi il Titolo:

//Numeri casuali sempre diversi//

Quindi le Istruzioni:

srand (time (NULL));

for (i=0; i<100000;i++) {

printf (“%d “, rand() %2);

}

return 0;

}

Infine l’Output:    

1             0             1              0             1             1             0             0              1              0 0 1 1 1 0 1 0 1

.              .              .               .              .              .              .              .               .            .              .              .              .               .             .              .              .

Questo codice ha generato una sequenza pseudocasuale di 0 ed 1 fino al limite indicato (nell’esempio il limite è 100.000).


(*) Per scaricare il programma che permette di utilizzare il linguaggio C/C++ si può accedere a: https://codelite.org/ . CodeLite è un IDE open source, gratuito e multipiattaforma specializzato in linguaggi di programmazione C, C ++, PHP e JavaScript (principalmente per sviluppatori backend che utilizzano Node.js) che funziona al meglio su tutte le principali piattaforme (OSX, Windows e Linux).

[1] http://www.2la.it/scienze-e-ingegneria/3408-la-simulazione-e-la-generazione-dei-numeri-a-caso/

[2] E’ noto che gli algoritmi oggi utilizzati maggiormente non generano davvero numeri random all’infinito. In altri termini questi algoritmi generano una sequenza pseudo-casuale con un numero finito di termini, grande ma finito. Questo vuol dire che dopo un certo punto la sequenza comincerà a ripetersi uguale a se stessa. (http://www.mathisintheair.org/wp/2018/06/la-non-casualita-dei-numeri-random/)

[3] Un algoritmo è un insieme di istruzioni o di passi o di azioni da compiere per manipolare un dato in input in modo da ottenere un dato di output.

[4] La simulazione Monte Carlo calcola una serie di realizzazioni possibili del fenomeno in esame, con il peso proprio della probabilità di tale evenienza, cercando di esplorare in modo denso tutto lo spazio dei parametri del fenomeno. Una volta calcolato questo campione casuale, la simulazione esegue delle ‘misure’ delle grandezze di interesse su tale campione. La simulazione Monte Carlo è ben eseguita se il valore medio di queste misure sulle realizzazioni del sistema converge al valore vero. (Wikipedia)

[5] La libreria standard del C è in realtà un insieme di librerie. Ogni file sorgente che ne faccia uso deve includere nel codice un “header” opportuno che contiene le dichiarazioni necessarie. Oltre quelle citate nell’articolo altre librerie standard sono: 1) input/output stdio.h; 2) funzioni matematiche math.h; 3) gestione di stringhe string.h; 4) operazioni su caratteri ctype.h; 5) gestione dinamica della memoria stdlib.h; 6) ricerca e ordinamento stdlib.h; … e molte altre.

[6] Oppure MAX+1 se si vuole comprendere un range di numeri da 1 a 100

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *