Losowanie liczb --> algorytm czy nicość ?

0

Witam.
Mam takie pytanie , czy losowanie liczb <ort>psełdolosowych </ort>np : za pomoca srand() , odbywa sie za pomoca jakiegos algorytmu ktory ma w sobie dana biblioteka czy nie wiadomo skad brane sa te liczby ??
Prosze o szczegolowa odpowiedz poniewaz stabilnosc mojego algorytmu od tego zalezy czy to wystarczy aby algorytm byl bezpieczny...
Bede ogromnie wdzieczny za podanie źródełek jakis albo jakiej kolwiek odpowiedzi z sensem.

Z gory wielkie dzięki.

Pozdrawiam.

0

Na 99% funkcja wyglada jakos tak
f(i+1) = f(i)*a+b % zakres

najłatwiej sprawdzić puszczając dwa razy z tym samym seedem.
Google powinny wiedziec

0

ale przeciez powatarzalnosc liczb w tym samym zakresie byla by duza , zwarzajac na to ze losujac 6 liczb z 20 tys z zakresu od -10000 do 10000 jest ponad 431 mln , przy a powatarzalnosc tej samej kombinacjii liczb w takim zakresie jest znikoma, zreszta wg twojej funkcjii cos nie tak jest , w google o tym niestesty malo wiedza ... dlatego zwaracam sie do was z pomoca , gdzie tego szukac lub ewentualnie w ktorej biblitece sie to moze znajdywac ....
pozdrawiam

0

Liniowy generator kongruencyjny

@down: najprostszy i rowniez odpowiedz na pytanie co znajduje sie zwykle pod funkcja rand() w roznych kompilatorach ;)

0

dlatego SRAND jest nazywany generatorem liczb pseUdolosowych, poniewaz nie jest losowy :) liczby sa generowane na podstawie aktualnego STANU generatora. dla kazdego STANU, nastepna wygenerowana liczba jest STALA i DETERMINISTYCZNA, wyliczalna na podstawie -jakiegos- wzoru. po wygenerowaniu liczby, STAN jest modyfikowany wg. innego wzoru.

wszystko wyglada na losowe, poniewaz zwykle 'uzytkownik' generatora NIE ZNA stanu generatora w danej chwili.

STAN generatora jest nazywany rowniez ZIARNEM (SEED z ang.).

stad szybki wniosek: dla danego ustalonego SEED'a, nastepna liczba bedzie ZAWSZE taka sama, i nastepna po niej bedzie taka sama, etc

powtarzalnosc generatorow liczb psudolosowych jest 100%'owa, w tym lezy ich siła: sa idealne do powtarzania testow - dla danego seed'a masz zawsze dokladnie taki sam ciag 'losowych' danych, i slabosc: nie mozna ich stosowac tam gdzie naprawde-naprawde-naprawde-potrzebujemy-losowosci

w tym ostatnim przypadku stosuje sie INNE, prawdziwe zrodla losowosci, np:

  • obserwowanie czestozmiennych w pakietach sieciowych
  • obserwowanie ostatnich bitow okreslajacych pozycje myszki na ekranie
  • itp

RAND na windowsie jest cienki i ma bardzo maly zakres - stala RAND_MAX bodajze ma 32768, wiec rand windowsowy potrafi generowac liczby 0..32767, i taki tez ma najwiekszy mozliwy cykl, a zaloze sie ze ma nawet mniejszy..

RAND na *nixie jest duzo lepszy, RAND_MAX to pelny zakres int32'a

na RAND'ach, mimo ze cienkie lub ciensze, mozna oprzec inny generator liczb, mocniejszy - patrz np. prosty w implementacji Mersenne' Twister (standardowo zwany MT_RAND, mtrand) - biblioteczke z jego darmowa wersja mozesz latwo na google znalezc. ale w dalszym ciagu jest to generator liczb PSEUDOlosowych, 100% powtarzalny dla danego seed'a, tylko - o lepszym rozrzucie i wiekszych cyklach

//edit @ johny bravo - podal linka do najprostszego mozliwego generatora pseudo-, to jest dokladny opis tego o czym pisal 'zabiłem kolegę na poligonie'

1 użytkowników online, w tym zalogowanych: 0, gości: 1