>  기사  >  백엔드 개발  >  난수 생성 방법

난수 생성 방법

WBOY
WBOY원래의
2024-07-23 21:03:14452검색

How Random Numbers are Generated

난수 생성 이해

난수는 시뮬레이션, 암호화, 통계 샘플링 등 다양한 분야에서 중요한 역할을 합니다. 이 기사에서는 널리 사용되는 두 가지 프로그래밍 언어인 JavaScript와 Python을 중심으로 난수가 생성되는 방식을 자세히 설명합니다.

의사 난수 생성기(PRNG)

대부분의 프로그래밍 언어는 의사 난수 생성기(PRNG)를 사용하여 난수를 생성합니다. PRNG는 수학적 알고리즘을 사용하여 무작위로 나타나는 일련의 숫자를 생성합니다. 이 숫자는 시드라고 알려진 초기 값에 의해 결정되므로 실제로 무작위가 아닙니다. 그러나 많은 용도에는 충분합니다.

PRNG의 특성

  1. 결정적: 동일한 시드가 주어지면 PRNG는 항상 동일한 숫자 시퀀스를 생성합니다.
  2. 주기성: PRNG는 결국 특정 기간이 지나면 일련의 숫자를 반복합니다.
  3. 속도: PRNG는 일반적으로 빠르고 효율적입니다.

자바스크립트: Math.random()

JavaScript의 Math.random() 함수는 일반적으로 난수를 생성하는 데 사용됩니다. Math.random()에서 사용되는 정확한 알고리즘은 JavaScript 엔진마다 다를 수 있지만 널리 사용되는 알고리즘은 Mersenne Twister입니다.

Math.random() 작동 방식

메르센 트위스터는 오랜 기간과 고품질 무작위성으로 유명합니다. 다음은 Mersenne Twister 알고리즘을 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);

이 코드는 난수를 생성하는 데 사용되는 Mersenne Twister 알고리즘의 단순화된 버전을 보여줍니다.

Math.random() 사용

JavaScript에서는 Math.random()을 사용하여 0(포함)과 1(제외) 사이의 난수를 생성할 수 있습니다.

const randomNumber = Math.random();
console.log(randomNumber);

Python: 무작위 모듈

Python은 난수를 생성하는 다양한 기능이 포함된 Random 모듈을 제공합니다. Python의 무작위 모듈에서 사용되는 기본 PRNG 알고리즘도 Mersenne Twister입니다.

Python의 무작위 모듈을 사용하는 방법

다음은 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)

난수 생성기 시딩

재현성을 보장하기 위해 Python에서 난수 생성기를 시드할 수 있습니다.

import random

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

# Generate random numbers
print(random.random())
print(random.randint(1, 100))

동일한 시드 값을 사용하면 프로그램을 실행할 때마다 동일한 일련의 난수가 생성됩니다.

결론

난수 생성은 다양한 응용 분야에서 기본 개념입니다. JavaScript의 Math.random()과 Python의 Random 모듈에 의해 생성된 숫자는 실제로 무작위는 아니지만 대부분의 실용적인 목적에서는 충분히 무작위입니다. 이러한 생성기가 작동하는 방식과 이를 효과적으로 사용하는 방법을 이해하는 것은 개발자와 연구원 모두에게 중요합니다.


이 문서에서는 Math.random() 및 Python의 무작위 모듈을 사용하는 실제 예제와 함께 JavaScript 및 Python에서 난수가 생성되는 방법에 대한 기본 개요를 제공합니다.

위 내용은 난수 생성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.