Bagaimana Nombor Rawak Dijana

WBOY
Lepaskan: 2024-07-23 21:03:14
asal
449 orang telah melayarinya

How Random Numbers are Generated

Memahami Penjanaan Nombor Rawak

Nombor rawak memainkan peranan penting dalam pelbagai bidang seperti simulasi, kriptografi, persampelan statistik dan banyak lagi. Artikel ini menyelidiki cara nombor rawak dijana, memfokuskan pada dua bahasa pengaturcaraan popular: JavaScript dan Python.

Penjana Nombor Pseudorandom (PRNG)

Kebanyakan bahasa pengaturcaraan menggunakan penjana nombor pseudorandom (PRNG) untuk menghasilkan nombor rawak. PRNG menggunakan algoritma matematik untuk menjana urutan nombor yang kelihatan rawak. Nombor ini tidak benar-benar rawak kerana ia ditentukan oleh nilai awal yang dikenali sebagai benih. Walau bagaimanapun, ia mencukupi untuk banyak aplikasi.

Ciri-ciri PRNG

  1. Deterministik: Memandangkan benih yang sama, PRNG akan sentiasa menghasilkan urutan nombor yang sama.
  2. Kekalaan: PRNG akhirnya akan mengulangi urutan nombor mereka selepas tempoh tertentu.
  3. Kelajuan: PRNG biasanya pantas dan cekap.

JavaScript: Math.random()

Fungsi Math.random() JavaScript biasanya digunakan untuk menjana nombor rawak. Algoritma tepat yang digunakan oleh Math.random() boleh berbeza antara enjin JavaScript yang berbeza, tetapi algoritma yang digunakan secara meluas ialah Mersenne Twister.

Cara Math.random() Berfungsi

Mersenne Twister terkenal dengan tempoh yang lama dan kerawak berkualiti tinggi. Berikut ialah contoh ringkas bagaimana algoritma Mersenne Twister boleh dilaksanakan dalam JavaScript:

class MersenneTwister {
  constructor(seed) {
    if (seed === undefined) {
      seed = new Date().getTime();
    }
    this.mt = new Array(624);
    this.index = 0;
    this.mt[0] = seed;
    for (let i = 1; i < 624; i++) {
      this.mt[i] = (0x6c078965 * (this.mt[i - 1] ^ (this.mt[i - 1] >> 30)) + i) >>> 0;
    }
  }

  generate() {
    if (this.index === 0) {
      this.twist();
    }
    let y = this.mt[this.index];
    y = y ^ (y >> 11);
    y = y ^ ((y << 7) & 0x9d2c5680);
    y = y ^ ((y << 15) & 0xefc60000);
    y = y ^ (y >> 18);
    this.index = (this.index + 1) % 624;
    return y / 0xffffffff;
  }

  twist() {
    for (let i = 0; i < 624; i++) {
      const y = (this.mt[i] & 0x80000000) + (this.mt[(i + 1) % 624] & 0x7fffffff);
      this.mt[i] = this.mt[(i + 397) % 624] ^ (y >> 1);
      if (y % 2 !== 0) {
        this.mt[i] = this.mt[i] ^ 0x9908b0df;
      }
    }
  }
}

// Example usage:
const mt = new MersenneTwister(12345); // Seed value
const randomNumber = mt.generate(); // Get a random number
console.log(randomNumber);
Salin selepas log masuk

Kod ini menunjukkan versi ringkas algoritma Mersenne Twister yang digunakan untuk menjana nombor rawak.

Menggunakan Math.random()

Dalam JavaScript, anda boleh menjana nombor rawak antara 0 (termasuk) dan 1 (eksklusif) menggunakan Math.random():

const randomNumber = Math.random();
console.log(randomNumber);
Salin selepas log masuk

Python: Modul rawak

Python menyediakan modul rawak, yang merangkumi pelbagai fungsi untuk menjana nombor rawak. Algoritma PRNG lalai yang digunakan oleh modul rawak Python juga ialah Mersenne Twister.

Cara Menggunakan Modul rawak Python

Berikut ialah beberapa contoh menjana nombor rawak dalam Python:

import random

# Generate a random float between 0.0 and 1.0
random_float = random.random()
print(random_float)

# Generate a random integer between 1 and 100
random_int = random.randint(1, 100)
print(random_int)

# Generate a random number from a normal distribution with mean 0 and standard deviation 1
random_normal = random.gauss(0, 1)
print(random_normal)
Salin selepas log masuk

Menyemai Penjana Nombor Rawak

Untuk memastikan kebolehulangan, anda boleh menyemai penjana nombor rawak dalam Python:

import random

# Seed the random number generator
random.seed(12345)

# Generate random numbers
print(random.random())
print(random.randint(1, 100))
Salin selepas log masuk

Menggunakan nilai benih yang sama akan menghasilkan urutan nombor rawak yang sama setiap kali anda menjalankan program.

Kesimpulan

Penjanaan nombor rawak ialah konsep asas dengan pelbagai aplikasi. Walaupun nombor yang dijana oleh Math.random() dalam JavaScript dan modul rawak dalam Python tidak benar-benar rawak, ia cukup rawak untuk kebanyakan tujuan praktikal. Memahami cara penjana ini berfungsi dan cara menggunakannya dengan berkesan adalah penting untuk pembangun dan penyelidik.


Artikel ini memberikan gambaran keseluruhan asas tentang cara nombor rawak dijana dalam JavaScript dan Python, bersama-sama dengan contoh praktikal menggunakan Math.random() dan modul rawak Python.

Atas ialah kandungan terperinci Bagaimana Nombor Rawak Dijana. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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