루프 반복에서 난수 반복
다음 문제를 고려하십시오. 15번의 반복을 실행하는 루프 내에서 dh.setDoors() 메서드 호출됩니다. setDoors() 내에서 srand(time(0))이 호출되어 난수 생성을 위한 시드를 설정합니다. 그런 다음 carSetter = rand()%3 1 또는 결정자 = rand()%2 1과 같은 표현식을 사용하여 난수가 생성됩니다.
carSetter 및 결정자의 값을 모니터링하면 각 루프 반복 전체에서 일정하게 유지되는 것으로 나타났습니다. , 그러나 다른 루프 실행 간에 변경됩니다. 루프에는 15번의 독립적인 반복이 포함되어 각 임의의 값이 달라야 하므로 이 동작은 예상치 못한 것입니다.
원인 조사
문제는 srand( time(0)) 각 반복이 시작될 때. 각 루프에서 시드를 재설정함으로써 의사 난수 시퀀스는 반복 내에서 time(0)의 상수 값에 의해 효과적으로 고정됩니다. 루프 전체에서 시간(0)이 동일하게 유지되므로 동일한 난수 시퀀스가 생성됩니다.
문제 해결
이 문제를 해결하려면 다음을 수행하는 것이 좋습니다. 각 루프 반복 내에서가 아니라 프로그램 시작 시 난수 생성기를 한 번만 초기화합니다. 이렇게 하면 각 루프 반복마다 서로 다른 난수 시퀀스가 활용됩니다.
수정된 구현은 다음과 유사합니다.
srand(time(0)); // Call srand() once at the start of the program while (...) { x = rand(); y = rand(); }
이 수정을 통해 x와 y의 값은 루프 반복을 통해 다양한 난수 시퀀스의 원하는 동작을 생성합니다.
위 내용은 루프 반복에서 난수가 반복되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!