16 비트 PRNG에 대해 this algorithm을 찾았습니다. 나는 x, y, t가 무엇인지 이해하지 못한다. 16 비트 시드를 사용하여 여러 개의 임의의 16 비트 값을 생성하고 싶습니다.이 16 비트 PRNG에 대한 이해
내가 맞다면 그 웹 페이지 (아래에 인용)에 표시된 함수는 의사 코드 일뿐입니다. 왜냐하면 x와 y는 함수의 지역 변수이기 때문에 항상 같은 값을 생성하기 때문입니다.
uint16_t rnd_xorshift_32() {
static uint16_t x=1,y=1;
uint16_t t=(x^(x<<5));
x=y;
return y=(y^(y>>1))^(t^(t>>3));
}
어떻게 위는 (시드가 미리 설정되어있는 것) 전역 변수
uint_16_t random
을 읽고 수정 될 수 있고, 그 다음 임의의 값으로 덮어?
편집 : 고마워요. 그래서 정적 변수에 대한 제 이해가 수정되었습니다. x
과 y
이 시드 (위의 코드에서 모두 1
)로 초기 설정되었다고 말하면서 이후의 임의의 값이되도록 수정하겠습니까? 그리고 t
은 임시 변수입니까?
정적입니다. 값은 호출간에 유지됩니다. 정적 선언도 한 번만 사용되므로 1에서 시작하여 더 이상 실행되지 않고 다음 호출을 위해 메모리에 보관됩니다. –
그들은 지역 변수이지만 자동 저장 기간을 가지고 있지 않습니다 -'정적'은'x'와'y'가 항상 변수의 동일한 인스턴스를 참조한다는 것을 의미합니다. 그들은 함수 호출간에 지속됩니다. –
가능한 [C 프로그램의 "정적"의미는 무엇입니까?] (http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program) –