0Pricing
C++ Academy · Lekcja

Liczby losowe z nagłówkiem random

Generuj dobrej jakości liczby losowe za pomocą nowoczesnych silników i rozkładów

Liczby losowe z nagłówkiem random to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Dlaczego nie rand()?

Starsza funkcja C std::rand() korzysta ze stanu globalnego, ma słabą jakość statystyczną i nie jest bezpieczna wątkowo. Nowoczesny C++ udostępnia znacznie lepsze narzędzia w nagłówku <random>.

Schemat w trzech częściach

Liczby losowe w nowoczesnym C++ wymagają trzech elementów:

  • źródła ziarna (prawdziwej entropii)
  • silnika generatora (deterministycznego stanu)
  • rozkładu (który kształtuje wynik)

Inicjalizacja za pomocą random_device

std::random_device pobiera prawdziwą entropię z systemu operacyjnego, ale może działać wolno. Użyj go raz, aby zainicjalizować szybki silnik.

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

Silnik mt19937

std::mt19937 (Mersenne Twister) to szybki generator pseudolosowy o doskonałej jakości statystycznej. Jest domyślnym wyborem w większości zastosowań.

Jednostajny rozkład całkowitoliczbowy

Generuje liczby całkowite o rozkładzie jednostajnym w domkniętym przedziale.

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

Jednostajny rozkład rzeczywisty

Służy do generowania liczb zmiennoprzecinkowych w półotwartym przedziale [a, b).

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

Rozkład normalny (Gaussa)

Służy do generowania losowych liczb o rozkładzie dzwonowym — często używanych w symulacjach i uczeniu maszynowym.

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

Inne rozkłady

Biblioteka zawiera wiele innych rozkładów: bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution i inne.

Powtarzalna losowość

Na potrzeby testów użyj stałej wartości ziarna, aby przy każdym uruchomieniu otrzymywać tę samą sekwencję.

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

Losowe tasowanie

Potasuj kontener za pomocą std::shuffle, która przyjmuje dowolny silnik.

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

Pułapka: ponowne inicjalizowanie w pętli

Nie twórz nowego obiektu random_device ani silnika dla każdej liczby losowej. Utwórz jeden silnik i używaj go ponownie przy kolejnych wywołaniach.

Szybkie sprawdzenie

Jaki jest najbezpieczniejszy współczesny sposób inicjalizowania silnika pseudolosowego w C++?

Podsumowanie

Współczesny C++ używa random_device do inicjalizacji, mt19937 jako silnika oraz rozkładu, takiego jak uniform_int_distribution, do kształtowania wyników. Używaj silnika ponownie — nigdy nie twórz nowego przy każdym wywołaniu.

Często zadawane pytania

Czy lekcja „Liczby losowe z nagłówkiem random” jest bezpłatna?

Tak — pełny tekst „Liczby losowe z nagłówkiem random” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Liczby losowe z nagłówkiem random”?

Generuj dobrej jakości liczby losowe za pomocą nowoczesnych silników i rozkładów Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Liczby losowe z nagłówkiem random”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy całkowitoliczbowe a zmiennoprzecinkowe
  2. Nagłówek cmath: pow, sqrt, abs, round
  3. Liczby losowe z nagłówkiem random
  4. Zakresy liczbowe i przepełnienie
← Powrót do C++ Academy