0Pricing
C++ Academy · Lezione

Numeri casuali con l'header random

Generi numeri casuali di qualità con motori e distribuzioni moderne

Numeri casuali con l'header random è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché non rand()?

La vecchia funzione C std::rand() usa uno stato globale, ha una qualità statistica scarsa e non è thread-safe. Il C++ moderno offre strumenti molto migliori in <random>.

La ricetta in tre parti

La generazione di numeri casuali nel C++ moderno coinvolge tre componenti:

  • una sorgente di seed (entropia reale)
  • un motore generatore (stato deterministico)
  • una distribuzione (determina la forma dell'output)

Inizializzazione con random_device

std::random_device raccoglie entropia reale dal sistema operativo, ma può essere lento. Lo usi una volta per inizializzare un motore veloce.

#include <random>
std::random_device rd;
std::mt19937 engine(rd());

Il motore mt19937

std::mt19937 (Mersenne Twister) è un motore pseudo-casuale veloce, con un'eccellente qualità statistica. È la scelta predefinita per la maggior parte delle applicazioni.

Distribuzione uniforme di interi

Produce interi distribuiti uniformemente in un intervallo chiuso.

std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);

Distribuzione uniforme di numeri reali

Per i numeri in virgola mobile in un intervallo semiaperto [a, b).

std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);

Distribuzione normale (gaussiana)

Per numeri casuali distribuiti a campana, comuni nelle simulazioni e nel machine learning.

std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);

Altre distribuzioni

La libreria ne include molte altre: bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution e altre ancora.

Casualità riproducibile

Per i test, inizializzi il generatore con un valore fisso per ottenere la stessa sequenza a ogni esecuzione.

std::mt19937 engine(42);
// Same output every time you run the program

Mescolare elementi casualmente

Mescoli un contenitore con std::shuffle, che accetta qualsiasi motore.

#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);

Problema: inizializzare di nuovo in un ciclo

Non crei un nuovo random_device o motore per ogni numero casuale. Costruisca un solo motore e lo riutilizzi tra una chiamata e l'altra.

Verifica rapida

Qual è il modo moderno più sicuro in C++ per inizializzare un motore pseudo-casuale?

Riepilogo

La generazione di numeri casuali nel C++ moderno usa random_device per l'inizializzazione, mt19937 come motore e una distribuzione come uniform_int_distribution per determinare la forma dell'output. Riutilizzi il motore: non ne crei mai uno per ogni chiamata.

Domande Frequenti

La lezione «Numeri casuali con l'header random» è gratuita?

Sì — il testo completo di «Numeri casuali con l'header random» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Numeri casuali con l'header random»?

Generi numeri casuali di qualità con motori e distribuzioni moderne Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Numeri casuali con l'header random»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Tipi interi e a virgola mobile a confronto
  2. L'header cmath: pow, sqrt, abs, round
  3. Numeri casuali con l'header random
  4. Limiti numerici e comportamento dell'overflow
← Torna a C++ Academy