Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya boleh mencipta urutan nombor rawak yang boleh berulang dalam JavaScript?

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

Linda Hamilton
Linda Hamiltonasal
2024-11-04 06:50:01911semak imbas

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>

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>

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!

Kenyataan:
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