왜 ' srand (시간 (NULL)) ' C ++에서 난수를 생성하기 위해?


Best answer

나는 Abhilash Gangadharan이 제공 한 것보다 더 나은 답을 줄 수 없습니다. 표준의 “srand ()”함수 C 라이브러리는 의사 랜덤 알고리즘이 준 고유 출력을 생성하는 데 필요한 여러 값을 초기화합니다.

일부 구형 생성기에서는 모듈로 프라임과 같은 작업을 수행 한 것처럼이 값이 시스템을 시작하는 데 직접 사용되었습니다. 계산에 “엔트로피”를 추가하고 결과를 무작위로 보이게하기 위해 가장 최근에 생성 된 숫자로부터 피드백을받은 수학. 좀 더 유명한 “Mersenne Twister”와 같은 더 현대적인 알고리즘은 유사한 피드백 시스템을 가지고 있지만 이것은 다르게 사용됩니다. 더 많은 양의 엔트로피를 제공하기 위해 생성 된 숫자 시퀀스가 ​​더 많은 수의 무작위성 통계 테스트를 통과하도록합니다.

주어진 값으로 PRNG를 시드하면 항상 정확히 동일한 출력이 생성됩니다. 따라서 일부 코드에서 “srand (12345)”를 호출하면 14D에서 “231,4492,2131”이 생성됩니다. EC2015, 14DEC2016에서 똑같은 결과를 얻을 수 있습니다. (이것은 실제로 내 연구를 올바르게 기억한다면 일부 알고리즘에 보안을 추가하기 위해 암호화의 일부 부분에서 사용됩니다.)

답변

이것은 난수 생성기 “시드”라고합니다. . 이렇게하면 고정 시드를 사용하거나 시간과 같은 일부 시스템 매개 변수를 사용하는 경우 동일한 난수 시퀀스를 생성 할 수 있으며 매번 다른 시드로 시작하고 다른 난수 시퀀스를 가질 수 있습니다. 이것은 확률 적 시뮬레이션의 결과가 난수 시퀀스의 예측 가능성에 영향을받지 않는지 확인하는 데 도움이됩니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다