Bagikan melalui


Kelas mersenne_twister_engine

Menghasilkan urutan bilangan bulat acak berkualitas tinggi berdasarkan algoritma twister Mersenne.

Sintaks

template <class UIntType,
    size_t W, size_t N, size_t M, size_t R,
    UIntType A, size_t U, UIntType D, size_t S,
    UIntType B, size_t T, UIntType C, size_t L, UIntType F>
class mersenne_twister_engine;

Parameter

UIntType
Tipe hasil bilangan bulat yang tidak ditandatangani. Untuk jenis yang mungkin, lihat acak>.<

W
Ukuran kata. Ukuran setiap kata, dalam bit, dari urutan status. Prasyarat: 2u < W ≤ numeric_limits<UIntType>::digits

N
Ukuran status. Jumlah elemen (nilai) dalam urutan status.

M
Ukuran shift. Jumlah elemen yang akan dilewati selama setiap twist. Prasyarat: 0 < M ≤ N

R
Bit masker. Prasyarat: R ≤ W

A
Masker XOR. Prasyarat: A ≤ (1u<<W) - 1u

U, S, T, L
Parameter shift tempering. Digunakan sebagai nilai shift selama scrambling (tempering). Prasyarat: U,S,T,L ≤ W

D, B, C
Parameter masker bit tempering. Digunakan sebagai nilai masker bit selama berebut (tempering). Prasyarat: D,B,C ≤ (1u<<W) - 1u

F
Pengali inisialisasi. Digunakan untuk membantu inisialisasi urutan. Prasyarat: F ≤ (1u<<W) - 1u

Anggota

mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed

default_seed adalah konstanta anggota, yang didefinisikan sebagai 5489u, digunakan sebagai nilai parameter default untuk mersenne_twister_engine::seed dan konstruktor nilai tunggal.

Untuk informasi selengkapnya tentang anggota mesin, lihat acak>.<

Keterangan

Templat kelas ini menjelaskan mesin angka acak, mengembalikan nilai pada interval tertutup [ 0, 2W - 1]. Ini menyimpan nilai integral besar dengan W * (N - 1) + R bit. Ini mengekstrak bit W pada satu waktu dari nilai besar ini, dan ketika telah menggunakan semua bit, ia memutar nilai besar dengan menggeser dan mencampur bit sehingga memiliki sekumpulan bit baru untuk diekstrak. Status mesin adalah nilai -bit terakhir NWyang digunakan jika operator() telah dipanggil setidaknya N kali, jika tidak MW, nilai -bit yang telah digunakan dan nilai terakhir N - M dari seed.

Generator memutar nilai besar yang dipegangnya dengan menggunakan register pergeseran umpan balik umum yang dipelintir yang ditentukan oleh nilai shift N dan M, nilai twist R, dan XOR-mask A bersyar. Selain itu, bit register shift mentah diacak (tempered) sesuai dengan matriks bit-scrambling yang ditentukan oleh nilai U, D, S, B, T, C, dan L.

Argumen UIntType templat harus cukup besar untuk menyimpan nilai hingga 2W - 1. Nilai argumen templat lainnya harus memenuhi persyaratan berikut: 2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u.

Meskipun Anda dapat membuat generator dari mesin ini secara langsung, disarankan Anda menggunakan salah satu typedef yang telah ditentukan sebelumnya ini:

mt19937: Mesin twister Mersenne 32-bit (Matsumoto dan Nishimura, 1998).

typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
    31, 0x9908b0df,
    11, 0xffffffff,
    7, 0x9d2c5680,
    15, 0xefc60000,
    18, 1812433253> mt19937;

mt19937_64: Mesin twister Mersenne 64-bit (Matsumoto dan Nishimura, 2000).

typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
    31, 0xb5026f5aa96619e9ULL,
    29, 0x5555555555555555ULL,
    17, 0x71d67fffeda60000ULL,
    37, 0xfff7eee000000000ULL,
    43, 6364136223846793005ULL> mt19937_64;

Untuk informasi terperinci tentang algoritma twister Mersenne, lihat artikel Wikipedia Mersenne twister.

Contoh

Untuk contoh kode, lihat acak>.<

Persyaratan

Header:<acak>

Namespace: std

Baca juga

<random>