<random>
Rastgele sayı oluşturma olanaklarını tanımlayarak tekdüzen dağıtılmış rastgele sayıların oluşturulmasına olanak sağlar.
Gereksinimler
Üst Bilgi: <random>
Ad alanı: std
Not
Kitaplık ' <random>
#include <initializer_list>' deyimini kullanır.
Özet
Rastgele sayı oluşturucu , sahte rastgele değerler dizisi oluşturan bir nesnedir. Belirtilen aralıkta tekdüzen olarak dağıtılmış değerler üreten bir oluşturucu, Tekdüzen Rastgele Sayı Oluşturucudur (URNG). BIR URNG işlevi görecek şekilde tasarlanmış bir sınıf şablonu, bu sınıfın bu makalenin devamında ele alınan belirli ortak özelliklere sahip olması durumunda altyapı olarak adlandırılır. BIR URNG, dağıtım tarafından tanımlanan bir şekilde dağıtılmış değerler üretmek için URNG'yi operator()
dağıtıma bağımsız değişken olarak geçirerek bir dağıtımla birleştirilebilir.
Bu bağlantılar bu makalenin ana bölümlerine atlar:
Hızlı İpuçları
kullanırken <random>
göz önünde bulundurmak için bazı ipuçları aşağıdadır:
Çoğu amaçla, URNG'ler dağıtımlara göre şekillendirilmesi gereken ham bitler üretir. (Bunun önemli bir istisnası, doğrudan bir URNG kullanmasıdır
std::shuffle()
.)URNG veya dağıtım çalıştırmak bir değiştirme işlemi olduğundan, bir URNG veya dağıtımın tek bir örneği eşzamanlı olarak güvenli bir şekilde çağrılamaz. Daha fazla bilgi için bkz . C++ Standart Kitaplığı'nda İş Parçacığı Güvenliği.
Birkaç altyapının önceden tanımlanmış tür tanımları sağlanır; bir altyapı kullanılıyorsa URNG oluşturmanın tercih edilen yolu budur.
Çoğu uygulama için en kullanışlı eşleştirme, bu makalenin
mt19937
devamında kod örneğinde gösterildiği gibi ileuniform_int_distribution
altyapıdır.
Üst bilgide aralarından <random>
seçim yapabileceğiniz birçok seçenek vardır ve bunlardan herhangi biri eski C Çalışma Zamanı işlevine rand()
tercih edilir. Sorunu rand()
ve bu eksiklikleri nasıl <random>
giderdiğini öğrenmek için bu videoya bakın.
Örnekler
Aşağıdaki kod örneğinde, belirlenemeyen bir tohumla oluşturulmuş bir oluşturucu kullanarak bu örnekte beş rastgele sayının nasıl oluşturulacağı gösterilmektedir.
#include <random>
#include <iostream>
using namespace std;
int main()
{
random_device rd; // non-deterministic generator
mt19937 gen(rd()); // to seed mersenne twister.
// replace the call to rd() with a
// constant value to get repeatable
// results.
for (int i = 0; i < 5; ++i) {
cout << gen() << " "; // print the raw output of the generator.
}
cout << endl;
}
2430338871 3531691818 2723770500 3252414483 3632920437
Bunlar yüksek kaliteli rastgele sayılar olsa da ve bu program her çalıştırıldığında farklı olsa da, yararlı bir aralıkta olmaları gerekmez. Aralığı denetlemek için aşağıdaki kodda gösterildiği gibi tekdüzen bir dağıtım kullanın:
#include <random>
#include <iostream>
using namespace std;
int main()
{
random_device rd; // non-deterministic generator
mt19937 gen(rd()); // to seed mersenne twister.
uniform_int_distribution<> dist(1,6); // distribute results between 1 and 6 inclusive.
for (int i = 0; i < 5; ++i) {
cout << dist(gen) << " "; // pass the generator to the distribution.
}
cout << endl;
}
5 1 6 1 2
Sonraki kod örneği, bir vektör ve dizi içeriğini karıştıran tekdüzen dağıtılmış rastgele sayı oluşturucuları ile daha gerçekçi bir kullanım örnekleri kümesini gösterir.
// cl.exe /EHsc /nologo /W4 /MTd
#include <algorithm>
#include <array>
#include <iostream>
#include <random>
#include <string>
#include <vector>
#include <functional> // ref()
using namespace std;
template <typename C> void print(const C& c) {
for (const auto& e : c) {
cout << e << " ";
}
cout << endl;
}
template <class URNG>
void test(URNG& urng) {
// Uniform distribution used with a vector
// Distribution is [-5, 5] inclusive
uniform_int_distribution<int> dist(-5, 5);
vector<int> v;
for (int i = 0; i < 20; ++i) {
v.push_back(dist(urng));
}
cout << "Randomized vector: ";
print(v);
// Shuffle an array
// (Notice that shuffle() takes a URNG, not a distribution)
array<string, 26> arr = { { "H", "He", "Li", "Be", "B", "C", "N", "O", "F",
"Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc",
"Ti", "V", "Cr", "Mn", "Fe" } };
shuffle(arr.begin(), arr.end(), urng);
cout << "Randomized array: ";
print(arr);
cout << "--" << endl;
}
int main()
{
// First run: non-seedable, non-deterministic URNG random_device
// Slower but crypto-secure and non-repeatable.
random_device rd;
cout << "Using random_device URNG:" << endl;
test(rd);
// Second run: simple integer seed, repeatable results
cout << "Using constant-seed mersenne twister URNG:" << endl;
mt19937 engine1(12345);
test(engine1);
// Third run: random_device as a seed, different each run
// (Desirable for most purposes)
cout << "Using non-deterministic-seed mersenne twister URNG:" << endl;
mt19937 engine2(rd());
test(engine2);
// Fourth run: "warm-up" sequence as a seed, different each run
// (Advanced uses, allows more than 32 bits of randomness)
cout << "Using non-deterministic-seed \"warm-up\" sequence mersenne twister URNG:" << endl;
array<unsigned int, mt19937::state_size> seed_data;
generate_n(seed_data.begin(), seed_data.size(), ref(rd));
seed_seq seq(begin(seed_data), end(seed_data));
mt19937 engine3(seq);
test(engine3);
}
Using random_device URNG:
Randomized vector: 5 -4 2 3 0 5 -2 0 4 2 -1 2 -4 -3 1 4 4 1 2 -2
Randomized array: O Li V K C Ti N Mg Ne Sc Cl B Cr Mn Ca Al F P Na Be Si Ar Fe S He H
--
Using constant-seed mersenne twister URNG:
Randomized vector: 3 -1 -5 0 0 5 3 -4 -3 -4 1 -3 0 -3 -2 -4 5 1 -1 -1
Randomized array: Al O Ne Si Na Be C N Cr Mn H V F Sc Mg Fe K Ca S Ti B P Ar Cl Li He
--
Using non-deterministic-seed mersenne twister URNG:
Randomized vector: 5 -4 0 2 1 -2 4 4 -4 0 0 4 -5 4 -5 -1 -3 0 0 3
Randomized array: Si Fe Al Ar Na P B Sc H F Mg Li C Ti He N Mn Be O Ca Cr V K Ne Cl S
--
Using non-deterministic-seed "warm-up" sequence mersenne twister URNG:
Randomized vector: -1 3 -2 4 1 3 0 -5 5 -5 0 0 5 0 -3 3 -4 2 5 0
Randomized array: Si C Sc H Na O S Cr K Li Al Ti Cl B Mn He Fe Ne Be Ar V P Ca N Mg F
--
Bu kod, bir test şablonu işleviyle iki farklı rastgele seçim gösterir: bir tamsayı vektörü rastgele hale getirme ve dizinlenmiş veri dizisini karıştırma. Test işlevine yapılan ilk çağrı şifreleme güvenli, belirlenemeyen, dağıtılamayan, yinelenemeyen URNG'yi random_device
kullanır. İkinci test çalıştırması, sonuçların yinelenebilir olduğu anlamına gelen belirlenimci bir 32 bit sabit tohumu ile URNG olarak kullanır mersenne_twister_engine
. Üçüncü test, 32 bitlik belirleyici olmayan bir sonucu olan random_device
tohumları mersenne_twister_engine
çalıştırır. Dördüncü test çalıştırması, sonuçlarla random_device
dolu bir çekirdek dizisi kullanarak bunu genişletir ve bu da etkili bir şekilde 32 bit'ten fazla belirleyici olmayan rastgelelik (ancak yine de şifreleme güvenliği sağlamaz) sağlar. Daha fazla bilgi için okumaya devam edin.
Kategorilere Ayrılmış Liste
Tekdüzen Rastgele Sayı Oluşturucuları
URNG'ler genellikle şu özellikler açısından açıklanmaktadır:
Dönem uzunluğu: Oluşturulan sayıların sırasını yinelemek için gereken yineleme sayısı. Ne kadar uzunsa o kadar iyi.
Performans: Sayıların ne kadar hızlı oluşturulabileceği ve ne kadar bellek aldığı. Ne kadar küçük ise o kadar iyidir.
Kalite: Oluşturulan sıranın gerçek rastgele sayılara ne kadar yakın olduğu. Buna genellikle "rastgelelik" denir.
Aşağıdaki bölümlerde, üst bilgide <random>
sağlanan tekdüzen rastgele sayı oluşturucuları (URNG) listeleniyor.
Belirleyici Olmayan Oluşturucu
random_device
Sınıf
Bir dış cihaz kullanarak belirlenemeyen, kriptografik olarak güvenli rastgele bir sıra oluşturur. Genellikle bir motorun tohumunu yapmak için kullanılır. Düşük performans, çok yüksek kalite. Daha fazla bilgi için bkz . Açıklamalar.
Önceden Tanımlanmış Parametrelerle Altyapı Türü Tanımları
Motorları ve motor bağdaştırıcılarını örneklemek için. Daha fazla bilgi için bkz . Altyapılar ve Dağıtımlar.
default_random_engine
Varsayılan altyapı.typedef mt19937 default_random_engine;
knuth_b
Knuth altyapısı.typedef shuffle_order_engine<minstd_rand0, 256> knuth_b;
minstd_rand0
1988 minimal standart motor (Lewis, Goodman ve Miller, 1969).typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
minstd_rand
Minimum standart motorminstd_rand0
güncelleştirildi (Park, Miller ve Stockmeyer, 1993).typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
mt19937
32 bit Mersenne twister motor (Matsumoto ve Nishimura, 1998).typedef mersenne_twister_engine< unsigned int, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253> mt19937;
mt19937_64
64 bit Mersenne twister motor (Matsumoto ve Nishimura, 2000).typedef mersenne_twister_engine< unsigned long long, 64, 312, 156, 31, 0xb5026f5aa96619e9ULL, 29, 0x5555555555555555ULL, 17, 0x71d67fffeda60000ULL, 37, 0xfff7eee000000000ULL, 43, 6364136223846793005ULL> mt19937_64;
ranlux24
24 bit RANLUX motoru (Martin Lüscher ve Fred James, 1994).typedef discard_block_engine<ranlux24_base, 223, 23> ranlux24;
ranlux24_base
içinranlux24
temel olarak kullanılır.typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48
48 bit RANLUX motoru (Martin Lüscher ve Fred James, 1994).typedef discard_block_engine<ranlux48_base, 389, 11> ranlux48;
ranlux48_base
içinranlux48
temel olarak kullanılır.typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
Altyapı Şablonları
Altyapı şablonları tek başına URNG'ler veya altyapı bağdaştırıcılarına geçirilen temel altyapılar olarak kullanılır. Bunlar genellikle önceden tanımlanmış bir altyapı tür tanımıyla oluşturulur ve bir dağıtıma geçirilir. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.
Veri Akışı Adı | Açıklama |
---|---|
linear_congruential_engine Sınıf |
Doğrusal eşzamanlı algoritmayı kullanarak rastgele bir dizi oluşturur. En basit ve en düşük kalite. |
mersenne_twister_engine Sınıf |
Mersenne bükücü algoritmasını kullanarak rastgele bir dizi oluşturur. Random_device sınıfı dışında en karmaşık ve en yüksek kalitedir. Çok hızlı performans. |
subtract_with_carry_engine Sınıf |
Taşıma ile çıkarma algoritmasını kullanarak rastgele bir dizi oluşturur. üzerinde linear_congruential_engine bir geliştirme, ancak çok daha mersenne_twister_engine düşük kalite ve performans. |
Altyapı Bağdaştırıcı Şablonları
Altyapı bağdaştırıcıları, diğer (temel) altyapıları uyarlayan şablonlardır. Bunlar genellikle önceden tanımlanmış bir altyapı tür tanımıyla oluşturulur ve bir dağıtıma geçirilir. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.
Veri Akışı Adı | Açıklama |
---|---|
discard_block_engine Sınıf |
Temel altyapısı tarafından döndürülen değerleri atarak rastgele bir sıra oluşturur. |
independent_bits_engine Sınıf |
Temel altyapısı tarafından döndürülen değerlerden bitleri yeniden paketleyerek belirtilen sayıda bit içeren rastgele bir sıra oluşturur. |
shuffle_order_engine Sınıf |
Temel altyapısından döndürülen değerleri yeniden sıralayarak rastgele bir sıra oluşturur. |
Rastgele Sayı Dağılımları
Aşağıdaki bölümlerde, üst bilgide <random>
sağlanan dağıtımlar listeleniyor. Dağılımlar, genellikle GIRIŞ olarak URNG çıkışını kullanan ve çıkışı tanımlanmış istatistiksel bir olasılık yoğunluğu işleviyle dağıtan bir işlem sonrası mekanizmasıdır. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.
Tekdüzen Dağıtımlar
Veri Akışı Adı | Açıklama |
---|---|
uniform_int_distribution Sınıf |
[a, b] (kapsayıcı dahil) kapalı aralıkta aralık genelinde tekdüzen bir tamsayı değeri dağılımı oluşturur. |
uniform_real_distribution Sınıf |
Yarı açık aralıkta (a, b) (özel dahil) tekdüzen bir gerçek (kayan nokta) değer dağılımı oluşturur. |
generate_canonical |
[0, 1) (hariç olmak üzere) arasında belirli bir duyarlık için gerçek (kayan nokta) değerlerinin eşit dağılımını oluşturur. |
Bernoulli Dağıtımları
Veri Akışı Adı | Açıklama |
---|---|
bernoulli_distribution Sınıf |
Değerlerin Bernoulli dağılımını bool üretir. |
binomial_distribution Sınıf |
Tamsayı değerlerinin binom dağılımını oluşturur. |
geometric_distribution Sınıf |
Tamsayı değerlerinin geometrik dağılımını oluşturur. |
negative_binomial_distribution Sınıf |
Tamsayı değerlerinin negatif binom dağılımını üretir. |
Normal Dağılımlar
Veri Akışı Adı | Açıklama |
---|---|
cauchy_distribution Sınıf |
Gerçek (kayan nokta) değerlerin Cauchy dağılımını üretir. |
chi_squared_distribution Sınıf |
Gerçek (kayan nokta) değerlerin kikare dağılımını oluşturur. |
fisher_f_distribution Sınıf |
Gerçek (kayan nokta) değerlerin F dağılımını (Snedecor'un F dağılımı veya Fisher-Snedecor dağılımı olarak da bilinir) üretir. |
lognormal_distribution Sınıf |
Gerçek (kayan nokta) değerlerin günlük normal dağılımını oluşturur. |
normal_distribution Sınıf |
Gerçek (kayan nokta) değerlerin normal (Gauss) dağılımını üretir. |
student_t_distribution Sınıf |
Bir Öğrencinin gerçek (kayan nokta) değerlerinin t dağılımını oluşturur. |
Poisson Dağıtımları
Veri Akışı Adı | Açıklama |
---|---|
exponential_distribution Sınıf |
Gerçek (kayan nokta) değerlerin üstel dağılımını oluşturur. |
extreme_value_distribution Sınıf |
Gerçek (kayan nokta) değerlerin aşırı değer dağılımını oluşturur. |
gamma_distribution Sınıf |
Gerçek (kayan nokta) değerlerin gama dağılımını oluşturur. |
poisson_distribution Sınıf |
Tamsayı değerlerinin Poisson dağılımını oluşturur. |
weibull_distribution Sınıf |
Gerçek (kayan nokta) değerlerin Weibull dağılımını üretir. |
Örnekleme Dağıtımları
Veri Akışı Adı | Açıklama |
---|---|
discrete_distribution Sınıf |
Ayrık bir tamsayı dağılımı oluşturur. |
piecewise_constant_distribution Sınıf |
Gerçek (kayan nokta) değerlerin parçalı sabit dağılımını üretir. |
piecewise_linear_distribution Sınıf |
Gerçek (kayan nokta) değerlerin parçalı doğrusal dağılımını oluşturur. |
Yardımcı Program İşlevleri
Bu bölümde, üst bilgide <random>
sağlanan genel yardımcı program işlevleri listelenir.
Veri Akışı Adı | Açıklama |
---|---|
seed_seq Sınıf |
Yanlı olmayan karışık bir tohum dizisi oluşturur. Rastgele değişken akışların çoğaltılmasını önlemek için kullanılır. Birçok URNG altyapıdan örneklendiğinde kullanışlıdır. |
İşleçler
Bu bölümde, üst bilgide <random>
sağlanan işleçler listelenir.
Veri Akışı Adı | Açıklama |
---|---|
operator== |
İşlecin sol tarafındaki URNG'nin sağ taraftaki altyapıya eşit olup olmadığını sınar. |
operator!= |
İşlecin sol tarafındaki URNG'nin sağ taraftaki altyapıya eşit olup olmadığını sınar. |
operator<< |
Durum bilgilerini bir akışa yazar. |
operator>> |
Bir akıştan durum bilgilerini ayıklar. |
Altyapılar ve Dağıtımlar
içinde tanımlanan bu sınıf şablonu kategorilerinin her biri hakkında bilgi için aşağıdaki bölümlere <random>
bakın. Bu sınıf şablonu kategorilerinin her ikisi de bağımsız değişken olarak bir tür alır ve gerçek bağımsız değişken türü olarak izin verilen türün özelliklerini açıklamak için paylaşılan şablon parametre adlarını aşağıdaki gibi kullanır:
IntType
short
, ,int
,long
, ,long long
,unsigned short
,unsigned int
veyaunsigned long
unsigned long long
gösterir.UIntType
, ,unsigned int
unsigned long
veyaunsigned long long
gösterirunsigned short
.RealType
float
bir ,double
veyalong double
belirtir.
Motor
Altyapı Şablonları ve Altyapı Bağdaştırıcı Şablonları , parametreleri oluşturucuyu oluşturan şablonlardır.
Altyapı, örnekleri (oluşturucular) en düşük ve en yüksek değer arasında tekdüzen olarak dağıtılmış rastgele sayıların kaynağı olarak davranan bir sınıf veya sınıf şablonudur. Altyapı bağdaştırıcısı , başka bir rastgele sayı altyapısı tarafından üretilen değerleri alıp bu değerlere bir tür algoritma uygulayarak farklı rastgelelik özelliklerine sahip bir dizi değer sunar.
Her altyapı ve altyapı bağdaştırıcısı aşağıdaki üyelere sahiptir:
typedef
numeric-type
result_type
, oluşturucununoperator()
tarafından döndürülen türdür.numeric-type
örneği oluşturmada şablon parametresi olarak geçirilir.result_type operator()
ilemax()
arasındamin()
tekdüzen olarak dağıtılan değerleri döndürür.result_type min()
, oluşturucununoperator()
tarafından döndürülen en düşük değeri döndürür. Altyapı bağdaştırıcıları temel motorunmin()
sonucunu kullanır.result_type max()
oluşturucusununoperator()
tarafından döndürülen en büyük değeri döndürür. Bir tamsayı (tamsayı değerli) türü olduğundaresult_type
,max()
gerçekten döndürülebilecek en büyük değerdir (dahil); kayan nokta (gerçek değerli) bir tür olduğundaresult_type
,max()
döndürülebilecek tüm değerlerden (dahil olmayan) en küçük değerdir. Altyapı bağdaştırıcıları temel motorunmax()
sonucunu kullanır.void seed(result_type s)
tohum değeris
ile üreteci tohumlar. Altyapılar için imza varsayılan parametre desteği içindirvoid seed(result_type s = default_seed)
(altyapı bağdaştırıcıları ayrıvoid seed()
bir tanımlar, sonraki alt bölüme bakın).template <class Seq> void seed(Seq& q)
kullanarakseed_seq
Seq
üreteci tohumlar.çağırılarak
seed(x)
çekirdeklenmiş bir oluşturucu oluşturan bağımsız değişkeneresult_type x
sahip açık bir oluşturucu.çağırılarak
seed(seq)
çekirdeklenmiş bir oluşturucu oluşturan bağımsız değişkeneseed_seq& seq
sahip açık bir oluşturucu.void discard(unsigned long long count)
zamanları etkili bir şekilde çağırıroperator()
count
ve her değeri atar.
Altyapı bağdaştırıcıları ayrıca bu üyeleri de destekler (Engine
altyapı bağdaştırıcısının ilk şablon parametresidir ve temel altyapının türünü belirtir):
Oluşturucuyu temel altyapının varsayılan oluşturucusundan başlatacak varsayılan oluşturucu.
bağımsız değişkenine
const Engine& eng
sahip açık bir oluşturucu. Bu, temel motoru kullanarak kopya yapımını desteklemektir.bağımsız değişkenine
Engine&& eng
sahip açık bir oluşturucu. Bu, temel motoru kullanarak taşıma yapısını desteklemektir.void seed()
temel altyapının varsayılan tohum değeriyle oluşturucuyu başlatır.const Engine& base()
oluşturucuyu oluşturmak için kullanılan temel altyapıyı döndüren özellik işlevi.
Her altyapı, sonraki çağrıları operator()
tarafından oluşturulacak değerlerin sırasını belirleyen bir durum tutar. Aynı türdeki altyapılardan örnek alınan iki oluşturucunun durumları ve operator!=
kullanılarak operator==
karşılaştırılabilir. İki durum eşit olarak karşılaştırılırsa, aynı değer dizisini oluştururlar. Bir nesnenin durumu, oluşturucu kullanılarak operator<<
bir akışa 32 bit imzasız değerler dizisi olarak kaydedilebilir. Durum kaydedilerek değiştirilmez. Kaydedilmiş bir durum, kullanılarak operator>>
aynı türdeki bir altyapıdan oluşturulan oluşturucuya okunabilir.
Dağıtım
Rastgele Sayı Dağılımları, örnekleri bir altyapıdan alınan tekdüzen dağıtılmış rastgele sayı akışını belirli bir dağılıma sahip rastgele sayı akışına dönüştüren bir sınıf veya sınıf şablonudur. Her dağıtımda aşağıdaki üyeler vardır:
typedef
numeric-type
result_type
, dağıtımınoperator()
tarafından döndürülen türdür.numeric-type
örneği oluşturmada şablon parametresi olarak geçirilir.template <class URNG> result_type operator()(URNG& gen)
, tekdüzen dağıtılmış rastgele değerlerin ve dağıtımın depolanan parametrelerinin kaynağı olarak kullanarakgen
dağıtımın tanımına göre dağıtılan değerleri döndürür.template <class URNG> result_type operator()(URNG& gen, param_type p)
, tekdüzen dağıtılmış rastgele değerlerin ve parametre yapısınınp
kaynağı olarak kullanarakgen
dağıtımın tanımına uygun olarak dağıtılan değerleri döndürür.typedef
unspecified-type
param_type
, isteğe bağlı olarak 'aoperator()
geçirilen parametre paketidir ve döndürülen değerini oluşturmak için depolanan parametrelerin yerine kullanılır.Oluşturucu
const param&
, depolanan parametreleri bağımsız değişkeninden başlatır.param_type param() const
depolanan parametreleri alır.void param(const param_type&)
saklı parametreleri bağımsız değişkeninden ayarlar.result_type min()
, dağıtımınoperator()
tarafından döndürülen en düşük değeri döndürür.result_type max()
, dağıtımınoperator()
tarafından döndürülen en büyük değeri döndürür. Bir tamsayı (tamsayı değerli) türü olduğundaresult_type
,max()
gerçekten döndürülebilecek en büyük değerdir (dahil); kayan nokta (gerçek değerli) bir tür olduğundaresult_type
,max()
döndürülebilecek tüm değerlerden (dahil olmayan) en küçük değerdir.void reset()
önbelleğe alınmış değerleri atar, böylece bir sonraki çağrısının sonucu, çağrıdanoperator()
önce altyapıdan alınan hiçbir değere bağımlı olmaz.
Parametre yapısı, bir dağıtım için gereken tüm parametreleri depolayan bir nesnedir. Şunları içerir:
typedef
distribution-type
distribution_type
, dağılımının türüdür.Dağıtım oluşturucularının almasıyla aynı parametre listelerini alan bir veya daha fazla oluşturucu.
Dağıtımla aynı parametre erişim işlevleri.
Eşitlik ve eşitsizlik karşılaştırma işleçleri.
Daha fazla bilgi için, bu makalede daha önce bağlantılı olan bu makalenin altındaki başvuru alt konularına bakın.
Açıklamalar
Visual Studio'damt19937
random_device
bu karşılaştırma tablosunda gösterildiği gibi son derece yararlı iki URNG vardır:
URNG | Hızlı | Şifreleme güvenliği | Tohumlanabilir | Deterministic |
---|---|---|---|---|
mt19937 |
Yes | Hayı | Evet | Evet* |
random_device |
Hayı | Evet | Hayır | Hayır |
* Bilinen bir tohumla birlikte sağlandığında.
ISO C++ Standardının şifreleme açısından güvenli olmasını gerektirmese random_device
de, Visual Studio'da şifreleme açısından güvenli olacak şekilde uygulanır. ("Kriptografik olarak güvenli" terimi garanti etmez, ancak belirli bir rastgele belirleme algoritmasının sağladığı minimum entropi düzeyini ve dolayısıyla öngörülebilirlik düzeyini ifade eder. Daha fazla bilgi için Kriptografik olarak güvenli sözderandom sayı oluşturucusunun Wikipedia makalesine bakın.) ISO C++ Standardı bunu gerektirmediğinden, diğer platformlar basit bir sahte rastgele sayı oluşturucu (kriptografik olarak güvenli değildir) olarak uygulanabilir random_device
ve yalnızca başka bir oluşturucu için tohum kaynağı olarak uygun olabilir. Platformlar arası kodda kullanırken random_device
bu platformların belgelerine bakın.
Tanım gereği sonuçlar random_device
yeniden üretilebilir değildir ve bunun yan etkisi, diğer URNG'lerden önemli ölçüde daha yavaş çalışabilmesidir. Kod örneğinde gösterildiği gibi, şifreleme açısından güvenli bir kullanım mt19937
veya benzer bir altyapı olması gerekmeyen uygulamaların çoğu için random_device
çağrısıyla bunu görmek isteyebilirsiniz.