Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menjana Nombor Rawak Berulang dalam JavaScript?

Bagaimanakah Saya Boleh Menjana Nombor Rawak Berulang dalam JavaScript?

DDD
Lepaskan: 2024-12-11 09:31:09
asal
309 orang telah melayarinya

How Can I Generate Repeatable Random Numbers in JavaScript?

Membenihkan Penjana Nombor Rawak dalam JavaScript

Pengenalan:

JavaScript's Math.random( ) fungsi, sambil menyediakan rawak, tidak membenarkan pembenihan. Ini bermakna bahawa setiap kali fungsi itu digunakan, ia menjana urutan nombor baharu, yang boleh menjadi masalah untuk situasi di mana urutan rawak berulang diingini.

Penjana Nombor Pseudorandom Boleh Benih:

Memandangkan Math.random() tidak mempunyai keupayaan pembenihan, adalah perlu untuk melaksanakan Pseudorandom luaran Penjana Nombor (PRNG) yang menawarkan fungsi pembenihan. PRNG menyediakan nombor rawak berkualiti tinggi dan membenarkan pemulaan dengan satu atau lebih nilai benih.

Permulaan Benih:

PRNG memerlukan permulaan yang betul untuk memastikan rawak. Nilai benih yang diedarkan dengan baik, entropi tinggi adalah penting untuk rawak yang teguh. Fungsi hash, seperti cyrb128, boleh menjana benih yang sesuai daripada rentetan pendek. Sebagai alternatif, data dummy boleh digunakan sebagai padding dengan berbilang lelaran penjana untuk mencampurkan keadaan awal secara menyeluruh.

Pertimbangan Prestasi:

Nombor JavaScript hanya menyokong sehingga 53-bit resolusi untuk integer keseluruhan dan resolusi 32-bit untuk operasi bitwise. PRNG moden sering menggunakan operasi 64-bit, tetapi shim diperlukan untuk pelaksanaan JS, yang boleh mengurangkan prestasi secara drastik. Algoritma PRNG yang dibentangkan mengutamakan operasi 32-bit untuk prestasi optimum dalam JavaScript.

PRNG Disyorkan:

sfc32 (Simple Fast Counter)

sfc32 ialah PRNG pantas dengan keadaan dalaman 128-bit yang cemerlang dalam JavaScript. Ia mempamerkan kualiti rawak yang sangat baik dan biasanya digunakan dalam suite ujian nombor rawak PractRand.

Contoh Penggunaan:

function sfc32(a, b, c, d) {
  return function() {
    // State update logic
    ...
    return (t >>> 0) / 4294967296;  // Convert to floating-point number in the range [0, 1)
  };
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
Salin selepas log masuk

Perhatikan bahawa contoh menggunakan penjanaan benih mudah kaedah untuk tujuan demonstrasi. Dalam amalan, mekanisme penjanaan benih yang lebih mantap harus digunakan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan