Rastgele Üreteçler
Rastgele bitler üretin
Rastgele Üreteçler, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Neden <random>
Eski rand() düşük niteliklidir ve denetlenmesi zordur. <random> kitaplığı rastgeleliği üreteçlere (rastgele bit kaynakları) ve dağılımlara (çıktı biçimleri) ayırır.
#include <iostream>
#include <random>
int main() {
std::mt19937 engine(42);
std::cout << "engine produced a value\n";
unsigned int v = engine();
std::cout << (v != 0 ? "non-zero" : "zero") << '\n';
return 0;
}Mersenne Twister
std::mt19937 en yaygın üreteçtir: hızlıdır, niteliği yüksektir ve periyodu uzundur. Sayı, bit cinsinden durum boyutunu belirtir.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
unsigned int a = gen();
unsigned int b = gen();
std::cout << (a != b ? "two different values" : "same") << '\n';
return 0;
}Üreteçler belirlenimcidir
Aynı tohum verildiğinde bir üreteç her zaman aynı diziyi üretir. Sonuçların yeniden üretilebilir olmasını sağlayan şey budur.
#include <iostream>
#include <random>
int main() {
std::mt19937 a(123), b(123);
std::cout << std::boolalpha << (a() == b()) << '\n';
std::cout << (a() == b()) << '\n';
return 0;
}Üreteci çağırma
Bir üreteç çağrılabilir bir nesnedir. Her engine() çağrısı, kendi aralığındaki bir sonraki ham rastgele tamsayıyı döndürür.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(7);
for (int i = 0; i < 3; ++i) {
unsigned int v = gen();
std::cout << (v % 100) << ' ';
}
std::cout << '\n';
return 0;
}Üreteç aralığı
min() ve max(), bir üretecin üretebileceği ham değerlerin aralığını bildirir.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen;
std::cout << "min: " << gen.min() << '\n';
std::cout << "max: " << gen.max() << '\n';
return 0;
}Diğer üreteçler
Kitaplık çeşitli üreteçler sunar:
minstd_rand: küçük bir doğrusal eşlenik üreteci.mt19937: genel amaçlı varsayılan üreteç.ranlux48: daha yüksek nitelikli, ancak daha yavaş.
#include <iostream>
#include <random>
int main() {
std::minstd_rand lcg(5);
std::mt19937 mt(5);
std::cout << (lcg() % 10) << ' ' << (mt() % 10) << '\n';
return 0;
}64 bitlik üreteç
Büyük karma değerleri veya çok geniş aralıkları gibi 64 bitlik rastgele değerlere ihtiyaç duyduğunuzda std::mt19937_64 kullanın.
#include <iostream>
#include <random>
int main() {
std::mt19937_64 gen(99);
unsigned long long v = gen();
std::cout << "got a 64-bit value: " << (v != 0 ? "yes" : "no") << '\n';
return 0;
}Üreteç ve dağılım karşılaştırması
Ham üreteç çıktısı, çok geniş bir aralıkta uniformdur. Zar atışı gibi kullanışlı değerler elde etmek için üreteci bir dağılıma aktarın.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2024);
std::uniform_int_distribution<int> die(1, 6);
std::cout << "rolled " << die(gen) << '\n';
return 0;
}Değerleri atlama
discard(n), çıktı üretmeden üreteci n adım ilerletir; bu, bir dizide ilerideki değerlere atlamak için kullanışlıdır.
#include <iostream>
#include <random>
int main() {
std::mt19937 a(10), b(10);
b.discard(2);
a(); a();
std::cout << std::boolalpha << (a() == b()) << '\n';
return 0;
}Tek bir üreteci yeniden kullanma
Programınızdaki tüm rastgelelik işlemleri için tek bir üreteç oluşturup yeniden kullanın. Her seferinde yeni bir üreteç oluşturmak kaynak israfıdır ve niteliği düşürebilir.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2026);
std::uniform_int_distribution<int> d10(1, 10);
int total = 0;
for (int i = 0; i < 5; ++i) total += d10(gen);
std::cout << "sum of 5 rolls: " << total << '\n';
return 0;
}Varsayılan tohumun sakıncası
Varsayılan olarak oluşturulan bir üreteç sabit bir varsayılan tohum kullanır; bu nedenle her çalıştırmada aynı diziyi üretir. Gerçek çeşitlilik için üretece tohum vermelisiniz (bu konu bir sonraki derste ele alınacaktır).
#include <iostream>
#include <random>
int main() {
std::mt19937 gen; // default seed: same every run
std::cout << "first value mod 1000: " << (gen() % 1000) << '\n';
return 0;
}Hızlı Kontrol
Rastgele üreteçler konusundaki anlayışınızı sınayın.
Özet
Rastgele üreteçleri öğrendiniz:
<random>, üreteçleri (bitler) dağılımlardan (biçim) ayırırstd::mt19937başvurulacak üreteçtir; belirli bir tohum için belirlenimcidir- tek bir üreteci yeniden kullanın ve gerçek çeşitlilik için ona doğru şekilde tohum verin
Sırada üreteç çıktısını dağılımları kullanarak biçimlendireceksiniz.
Sıkça Sorulan Sorular
“Rastgele Üreteçler” dersi ücretsiz mi?
Evet — “Rastgele Üreteçler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Rastgele Üreteçler” dersinde ne öğreneceğim?
Rastgele bitler üretin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Rastgele Üreteçler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Rastgele Üreteçler
- Dağılımlar
- Doğru Tohumlama
- Uygulamalı Örnekler