
RandomRandomizer::nextFloat 함수는 Linear Congruential Generator (LCG) 알고리즘을 사용하여 난수를 생성합니다. LCG 알고리즘은 다음과 같은 방식으로 작동합니다.
1. 초기값 seed를 설정합니다.
2. seed를 다음과 같은 방식으로 업데이트합니다: seed = (a * seed + c) mod m
3. seed를 2^32로 나눈 나머지를 float 값으로 변환하여 반환합니다.
여기서 a, c, m은 상수입니다. Java의 Random 클래스는 기본적으로 a = 1103515245, c = 12345, m = 2^31 - 1을 사용합니다.
중복되는 난수를 생성하는 문제를 해결하기 위한 방법은 다음과 같습니다.
1. seed를 초기화할 때마다 다른 값을 사용합니다. 예를 들어, System.currentTimeMillis()를 사용하여 현재 시간을 seed로 사용할 수 있습니다.
2. seed를 업데이트할 때마다 seed를 2^32로 나눈 나머지를 취하여 seed를 2^32 범위 내로 유지합니다.
3. seed를 초기화할 때마다 다른 알고리즘을 사용합니다. 예를 들어, Mersenne Twister 알고리즘을 사용할 수 있습니다.
Java의 Random 클래스는 seed를 초기화할 때마다 다른 값을 사용하여 중복되는 난수를 생성하는 문제를 해결합니다. 하지만, seed를 초기화할 때마다 다른 알고리즘을 사용하는 방법을 사용하여 더 안전한 난수를 생성할 수 있습니다.
2025-06-06 18:23