Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

funkcja rand() i srand(time(NULL) - o co dokładnie chodzi? jak to kontrolować?

Ostatnio zmodyfikowano 2015-11-30 13:09
Autor Wiadomość
LordShadow47
Temat założony przez niniejszego użytkownika
funkcja rand() i srand(time(NULL) - o co dokładnie chodzi? jak to kontrolować?
» 2015-11-26 16:19:33
Witam.
Mam kilka pytań odnośnie funkcji rand() wiem że wylosuje ona za każdym razem te same liczby przy każdorazowym uruchomieniu chyba że dodamy bibliotekę <ctime> i użyjemy srand(time(NULL)). Wtedy funkcja rand() i wtedy liczby są za każdym razem inne. I moje pytanie brzmi jakie jest dokładne powiązanie "czasu" z funkcją rand() jak to wpływa na cały przebieg losowanie i czy można dostrzec jakiś wzór? Albo czy to znaczy że o jakiejś godzinie losuje te same liczby?
P-140837
carlosmay
» 2015-11-26 16:46:02
Funkcja time() zwraca liczbę sekund od określonej w tej funkcji daty (nie pamiętam daty więc nie będę ściemniał)
i ta liczba służy jako ziarno (seed) dla funkcji srand() .
Dzięki temu za każdym uruchomieniem ziarno ma inną wartość.
Ziarno jest ustawione raz, przed pierwszym użyciem. Później jako ziarno używana jest wartość wylosowanej liczby,
stąd powtarzalność wyników, przy seed'zie tej samej początkowej wartości.
srand(3); zawsze da te same wyniki ( i tak dla każdej innej wartości).

edit: zainteresuj się tym. rand() to przestarzała funkcja.
<random>
P-140839
Monika90
» 2015-11-26 17:20:23
Najlepiej nie używać bieżącego czasu do inicjalizacji generatora, a funkcja time(NULL) to już w ogóle zło, bo jej wartość przyrasta co sekundę, więc bardzo łatwo ją przewidzieć. Uruchomienie dwóch instancji programu w tym samym momencie z dużym prawdopodobieństwem spowoduje wylosowanie tych samych liczb.
P-140842
Maciek
» 2015-11-26 22:39:55
Ewentualnie możesz zainteresować się częścią biblioteki boost - random, powinna wyczerpać temat (chyba), cześć rozwiązań zawartych w bibliotece boost wchodzi potem do standardu, tak jak de facto było z <random> w c++11.
http://www.boost.org/doc/libs​/1_59_0/doc/html​/boost_random.html
P-140886
LordShadow47
Temat założony przez niniejszego użytkownika
» 2015-11-30 13:09:22
Dziękuje za wszystkie odpowiedzi. Akurat potrzebna jest mi funkcja rand() powiązana z czasem bo chcę napisać program który szyfruje dane i odszyfrowanie jest możliwe tylko jeśli rozpocznie się deszyfrację o tej samej godzinie. Już wiem że losowanie przebiega tak samo dla tej samej godzinie, czyli jak cofnąłem zegar wyniki w tym samym czasie były identyczne.
P-141161
« 1 »
  Strona 1 z 1