내 친구가 내 SDL 프로그램을 위해 나에게 코드의 비트를주고, 모든 나는 그것이 임의의 색상을 만드는 것을 알고 있지만 내가 어떻게 작동하는지 몰라, 여기에 코드SDL, 임의의 색상 발생기
int unsigned temp = 10101;//seed
for(int y = 0;y < times;y++){
temp = temp*(y+y+1);
temp = (temp^(0xffffff))>>2;
//printf("%x\n",temp);
SDL_FillRect(sprite[y],NULL,temp);
SDL_BlitSurface(sprite[y],&paste[y],rScreen(),NULL);
}
에게 있습니다 내 질문은,이 코드 작업을 수행하고 어떻게 어떻게 임의의 색상을
"some amateur PRNG." - 네, 꽤 아마추어이고, 코딩 스타일이 특히 형편 없습니다. –
왜 "비트 논리 AND 대신 비트 XOR ^를 잘못 사용했습니다"코드가 올바르지 않습니다? – Laggy
@Laggy : PRNG에 관해서는 "작동한다"또는 "작동하지 않는다"고 말하기는 어렵습니다. 우리는 생산 된 가치의 통계적 분포에 대해 이야기해야합니다. 좋은 PRNG는 의사 무작위 오라클 (완벽한 무작위 값을 내뱉는 수학적 모델)을 근사해야합니다. 처음에는 제공된 코드가 좋은 PRNG가 아닌 것으로 보입니다. 비트 AND는 0x000000에서 0xFFFFFF까지의 범위를 강제합니다. 대신, XOR^그냥 0xFFFFFF 한계를 초과하도록 무료로두고 임시 비트를 내리고 있습니다. 어쩌면 2로 나누는 것은 범위의 값을 유지하려는 시도 일 수 있습니다. –