Bagikan melalui


Kelas subtract_with_carry_engine

Menghasilkan urutan acak dengan algoritma subtract-with-carry (Lagged Fibonacci).

Sintaks

template <class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_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: 0 < W ≤ numeric_limits<UIntType>::digits

S
Jeda pendek. Jumlah nilai bilangan bulat. Prasyarat: 0 < S < R

R
Jeda panjang. Menentukan pengulangan dalam seri yang dihasilkan.

Anggota

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

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

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

Keterangan

substract_with_carry_engine Templat kelas adalah peningkatan atas linear_congruential_engine. Tidak untuk mesin ini secepat atau dengan hasil berkualitas tinggi seperti mersenne_twister_engine.

Mesin ini menghasilkan nilai jenis integral yang tidak ditandatangani pengguna menggunakan relasi pengulangan ( periode) , di mana cy(i) memiliki nilai 1 jika x(i - S) - x(i - R) - cy(i - 1) < 0, jika tidak0, dan M memiliki nilai 2W. x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M Status mesin adalah indikator carry ditambah nilai R. Nilai-nilai ini terdiri dari nilai R terakhir yang dikembalikan jika operator() telah dipanggil setidaknya R kali, jika tidakN, nilai yang telah dikembalikan dan nilai terakhir R - N dari seed.

Argumen UIntType templat harus cukup besar untuk menyimpan nilai hingga M - 1.

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

ranlux24_base: Digunakan sebagai basis untuk ranlux24. typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;

ranlux48_base: Digunakan sebagai basis untuk ranlux48. typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;

Untuk informasi terperinci tentang pengurangan algoritma mesin carry, lihat artikel Wikipedia Generator Lagged Fibonacci.

Persyaratan

Header:<acak>

Namespace: std

Lihat juga

<random>