Pracuję w C i próbuję (rozpaczliwie) zrobić losowy generator, który nie tylko generuje inny numer za każdym razem, gdy uruchamiam generator, ale także inną sekwencję za każdym razem, gdy uruchom program. Testowałem prawie wszystko, co znalazłem online. Otrzymałem 2 dobre sposoby na zrobienie dobrego losowego generatora. Pierwszym z nich jest użycie innego materiału siewnego za każdym razem. Ale to oznacza, że muszę użyć innego losowego materiału siewnego za każdym razem, sprawy, której początkowo nie rozwiązałem. Oto, co próbuję teraz, ale to nie jest prawdziwie losowych jak chcę:próbuje znaleźć całkowicie losowy generator liczbowy
int myrand(int random_seed){
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed/65536) % 32768;
}
każdym razem i wywołania funkcji i zwiększenie ziarno o 1.
Drugim sposobem jest użycie zmiany time.time a to randomness.I próbował również wiele sposobów Aby to zaimplementować. Moja ostatnia próba jest tutaj: Compiler error-Possible IDE error"undefined reference to gettimeofday error" , ale nie mogłem użyć funkcji gettimeofday, ponieważ pracuję w systemie Windows. Również w tym pytaniu nie otrzymałem żadnych odpowiedzi.
Czy ktoś mógłby mi pomóc, w jaki sposób mogę wdrożyć losowy generator (prawdopodobnie używając czasu) w C działający w systemie Windows? Czy powinienem używać Uniksa?
Czy coś złego 'srand()'? Możesz zaszczepić to czas taki jak ten: 'srand (time (NULL));' –
Próbowałem również srand (time (NULL)), ale musiałem zrobić opóźnienia, aby czekać na zmianę czasu. Powodem jest to, że Chcę wygenerować dużą liczbę liczb losowych w jednym i nie chcę czekać 2 minuty na program do ich generowania.Miałem również próbować użyć milisekund, ale bez powodzenia.Może milisekundy jest odpowiedź, ale nie mogłem wdrożyć go poprawnie, znowu problem polegał na tym, że używam Windows. – Dchris
@ Dchris: zapełnij generator liczb pseudolosowych (PRNG) czasem * raz * na początku programu. Wtedy być może będziesz musiał nie uruchamiać swojego programu więcej niż raz na sekundę (i wprowadzenie milisekund pomoże w tym), ale nie musisz czekać jednej sekundy za każdym razem, gdy czytasz numer z PRNG. –