Seed Random 구현 방식(고정 랜덤)
Random이라는 난수를 발생시키는 과정에서 늘 항상 고정으로 특정 처리를 하고 싶은 경우에 사용한다.
실제 난수발생기 로직으로 볼 수 없고 '선형 합동 생성기'라고 한다.
특정 시드를 기준으로 늘 항상 같은 List를 값을 반환해주는 코드이다.
public class SeedRandom
{
private int seed;
private List<int> m_listShuffleData = new List<int>();
public SeedRandom(int nSeed, int _totalCount)
{
seed = nSeed;
ShuffleIntList(_totalCount);
}
#region Private Method
private float Random()
{
seed++;
return (float)((seed * 9301 + 49297) % 233280 / 233280.0f);
}
private int RandomRange(int min, int max)
{
float rand = this.Random();
int number = (int)Mathf.Floor((rand * (max - min + 1)) + min);
return number;
}
private void ShuffleIntList(int _max)
{
List<int> dataOrigin = new List<int>();
for (int i = 0; i < _max; i++)
{
dataOrigin.Add(i);
}
while (0 < dataOrigin.Count)
{
int idx = RandomRange(0, dataOrigin.Count - 1);
int num = dataOrigin[idx];
m_listShuffleData.Add(num);
dataOrigin.Remove(num);
}
}
#endregion
#region Public Method
public List<int> Data
{
get { return m_listShuffleData; }
}
#endregion
}
실제 이런 식의 코드 로직에 대한 설명
(seed * 9301 + 49297) % 233280 / 233280.0 난수를 생성하는 이유는 무엇입니까?
그렇지 않습니다. 완전히 결정적인 숫자를 생성합니다. 결과 시퀀스는 언뜻 보기에 무작위로 보일 수 있으므로 의사 랜덤 생성기입니다. 보다 정확하게는 선형 합동 생성기입니다.
참고 StackOverFlow : [링크]
★☆☆☆☆
반응형
'개발 > 기본) 기본기' 카테고리의 다른 글
기본기)c#) 무시 항목 (1) | 2021.04.14 |
---|---|
Tip) vi 명령어 정리 (0) | 2021.04.01 |
기본기)c#) is 연산자, as 연산자 (0) | 2021.03.05 |
기본기)빌보드 기법(Bill-Board) (2) | 2021.02.15 |
기본기)List Loop in remove elements (0) | 2021.02.06 |
댓글