Bagaimanakah saya boleh mencipta urutan nombor rawak yang boleh berulang dalam JavaScript?

Linda Hamilton
Lepaskan: 2024-11-04 06:50:01
asal
854 orang telah melayarinya

How can I create a repeatable sequence of random numbers in JavaScript?

Menyediakan Benih Tersuai untuk Penjana Nombor Rawak JavaScript

Fungsi JavaScript Math.random() lalai menjana nilai rawak dalam julat [0 , 1], tetapi ia tidak membenarkan anda menetapkan benih tersuai. Akibatnya, urutan nombor rawak yang dijana tidak boleh diulang.

Untuk mencipta penjana nombor rawak JavaScript dengan benih yang boleh disesuaikan, kita boleh meneroka berbilang pilihan:

Math.random( ) Fungsi Pembantu:

Jika anda tidak memerlukan pembenihan tersuai, anda boleh menggunakan Math.random() dengan fungsi pembantu untuk mencipta julat nilai yang boleh diulang (cth., randRange(mula, tamat)) .

Penjana Nombor Pseudorandom (PRNG):

Untuk lebih kawalan ke atas rawak, pertimbangkan untuk menggunakan PRNG seperti Mersenne Twister. Walau bagaimanapun, pelaksanaannya adalah kompleks. Alternatifnya ialah Penjana Kongruen Linear (LCG), yang lebih mudah untuk dilaksanakan dan menyediakan rawak yang baik.

Pelaksanaan LCG (RNG Boleh Benih Pendek):

Di bawah adalah contoh pelaksanaan RNG boleh benih pendek menggunakan LCG:

<code class="js">function RNG(seed) {
  this.m = 0x80000000; // 2**31;
  this.a = 1103515245;
  this.c = 12345;

  this.state = seed ? seed : Math.floor(Math.random() * (this.m - 1));
}

RNG.prototype.nextInt = function() {
  this.state = (this.a * this.state + this.c) % this.m;
  return this.state;
};

RNG.prototype.nextFloat = function() {
  // returns in range [0,1]
  return this.nextInt() / (this.m - 1);
};

RNG.prototype.nextRange = function(start, end) {
  // returns in range [start, end): including start, excluding end
  // can't modulu nextInt because of weak randomness in lower bits
  var rangeSize = end - start;
  var randomUnder1 = this.nextInt() / this.m;
  return start + Math.floor(randomUnder1 * rangeSize);
};

RNG.prototype.choice = function(array) {
  return array[this.nextRange(0, array.length)];
};</code>
Salin selepas log masuk

Untuk menggunakan RNG:

<code class="js">var rng = new RNG(20);
for (var i = 0; i < 10; i++)
  console.log(rng.nextRange(10, 50));

var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
for (var i = 0; i < 10; i++)
  console.log(rng.choice(digits));</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta urutan nombor rawak yang boleh berulang dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan