Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Membuat Penjana Nombor Rawak Seedable dalam JavaScript?

Bagaimana untuk Membuat Penjana Nombor Rawak Seedable dalam JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-11-04 17:35:02520semak imbas

How to Create a Seedable Random Number Generator in JavaScript?

Penjana Nombor Rawak JavaScript Boleh Benih

Fungsi JavaScript Math.random() menjana nilai rawak antara 0 dan 1 berdasarkan masa semasa, serupa dengan penjana nombor rawak Java. Walau bagaimanapun, ia tidak mempunyai keupayaan untuk menentukan nilai benih untuk mengawal jujukan nombor yang dijana.

Mencipta Penjana Nombor Rawak Tersuai dengan Sokongan Benih

Untuk mencipta rawak penjana nombor dengan sokongan benih, pertimbangkan pilihan berikut:

Melaksanakan Penjana Kongruen Linear (LCG)

LCG adalah agak mudah untuk dilaksanakan dan memberikan kualiti rawak yang baik. Anda boleh menggunakan pemalar berikut:

m = 0x80000000; // 2**31
a = 1103515245;
c = 12345;

Berikut ialah contoh pelaksanaan dalam JavaScript:

<code class="javascript">function RNG(seed) {
  this.m = 0x80000000;
  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;
}</code>

Anda boleh melanjutkan kelas RNG ini untuk menyediakan kaedah tambahan seperti nextFloat, nextRange dan berdasarkan pilihan pada teras LCG.

Menggunakan Perpustakaan untuk RNG Boleh Benih Pendek

Perpustakaan seperti [js-random](https://www.npmjs.com/package/ js-random) menyediakan RNG pendek dan boleh benih dengan pilihan untuk algoritma yang berbeza.

Contoh Pelaksanaan

Berikut ialah contoh mudah menggunakan RNG berasaskan LCG:

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

Atas ialah kandungan terperinci Bagaimana untuk Membuat Penjana Nombor Rawak Seedable 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