Randomize

0

Jak wiadomo nic nie bierze się z nikąd :) Niedawno zastanawiałem się z czym posługuje się Delphi, generując liczby losowe. Czy robi je jakoś z daty w połączeniu z innymi bajerami czy jakimś innym sposobem ?

0

aktualny czas + odpowiedni algorytm.

0

Konkretnie generuje tą wartość na podstawie zmiennej RandSeed. Procedura Randomize() ustawia tą zmienną na aktualny czas, ale oczywiście można wstawić tam coś innego.

0

Dokładny opis tej procedury znajdziesz w źródłach biblioteki "system".

0

Poprawcie mnie, jeśli się mylę...
Czyli możliwym jest przewidywanie losowanych liczb?

0

Jeśli znasz algorytm to pewnie tak...Zresztą podobno nie zaleca sie wykorzystywania tego generatora do np. generowania haseł, bo można przewidzieć co sie wylosuje.Mówi sie, że to jest generator liczb pseudolosowych, tzn liczby nie są generowane w sposób naprawde losowy, ale na podstawie algorytmu. Chociaż podobno funkcja randomize(); może być różne implementowana w różnych kompilatorach.

// żadna liczba wygenerowana na komputerze bez współudziału użytkownika nie jest stricte losowa - ŁF

0

Ja bym do tego dodał jeszcze np. pozycje kursora myszy, rozdzielczość ekranu i numer seryjny płyty głównej - wtedy już chyba można generować hasła :)

0

A ja bym sie oparł na prognozie pogody w TV
Ona zawsze jest losowa :))
Jak deszcz to ...to i to wykonać
a jak słońce to... wykonać co innego

A tak poważnie to Łukasz F ma rację - miałem dawno dawno temu Amisię i na niej
zrobiłem program lotto. W języku którym programowałem nie było instrukcji do
włączania "kostki losowej" lecz tylko od razu samo wylosowanie liczby.
No i za każdym razem jak program uruchamiałem zaczynało losować od tych samych liczb.
To samo jest i w Delphi z tą tylko róznicą że tą "kostke" wcześniej uruchomisz, ale gdybyś trafiał na moment w którym zaczyna sie proces losowania to też byś wylosowywał te same liczby przy każdym wywołaniu losowania.

0

Czyli możliwym jest przewidywanie losowanych liczb?

Jezeli mozliwe jest ich przewidywanie to juz nie są losowe.

IMHO nie ma w ogóle licz losowych, tak jak toto lotek czy takie tam. Przecież(rz) wszystkie kulki np. w toto lotku sa poruszane przez wiatr, oddziałuje na nie grawitacja itd... gdyby znac te wszystkie czynniki, któryuch jest multum mozna TEORETYCZNIE przewidziec wszystko. Wiekszość ludzi interpretuje "losowe" jako z nikąd, jednak jest zupełnie inaczej. Jest to kwestia semantyki, losowe można zdefiniować jako "coś czego my nie potrafimy, nie jesteśmy w stanie praktycznie przewidzieć".

0

:). Ja bym wpuścił psa na klawiaturke a on by mi ponaciskał sałkowicie losowe klawisze i nikt by tego nie odkodował - :P

0

Na dobra sprawe nie wiadomo, kiedy program zostal uruchomiony, czy przez ten czas komputer pracowal z pelna moca i w jakim czasie dotarl do nieszczesnego randomize, czyli kiedy zostal odczytany aktualny czas, wiec chyba mozna zalorzyc, ze sa to liczby dostatecznie losowe o_O

0

Żeby być pewnym, czy nasz generator tworzy naprawde losowe liczby należy użyć do tego odpowiednich testów statystycznych, chociaż nie dają one i tak 100% pewności.

0

Albo dorzucić inne losowe wartości. Ja kiedyś w module zrobiłem tak:

initialization
  Randomize; // początek od czasu dnia
  RandSeed := RandSeed or GetCurrentProcess {uchwyt aktualnego procesu} xor GetTickCount; // coś w tym stylu :)

Generalnie, im więcej wartości, które w danym momencie mogą być losowe lub rzadko się powtarzać (aktualny czas, uchwyt procesu/wątku, numer seryjny karty sieciowej etc.) tym bardziej losowa jest nasza pseudolowa liczba :)

0

Przecież(rz) wszystkie kulki np. w toto lotku sa poruszane przez wiatr, oddziałuje na nie grawitacja itd... gdyby znac te wszystkie czynniki, któryuch jest multum mozna TEORETYCZNIE przewidziec wszystko.

To jest akurat bzdura. Wlasnie na tym polega heca, ze NIE MOZNA TEORETYCZNIE PRZEWIDZIEC, nawet jesli znaloby sie WSZYSTKIE czynniki, co zreszta tez jest niemozliwe.
Sorry, ze sie czepiam, ale nie lubie jak w postach sa takie glupoty.

0

Znajac wszystkie czynniki (co praktycznie jest nie mozliwe), MOZNA przewidziec co sie pozniej stanie. Tylko my PRAKTYCZNIE nie mozemy znac tych wszystkich czynników, dlatego uwazamy to za niemozliwe, praktycznie nie mozliwe, ale teoretycznie tak. Przecież(rz;]) wszystko bierze się "z czegoś"

Sorry, ze sie czepiam, ale nie lubie jak w postach sa takie glupoty.

:> :> :> :> :> :> :>

0

Co do zaś samej zasady generowania liczb losowych to było to już poruszne np.:
http://4programmers.net/Forum/viewtopic.php?id=29533&post=31065

0

Bóg nie gra w kości, wg A. Einsteina.

0

Tak naprawde nie ma zdarzen losowych. Sa tylko pseudolosowe bo w swiecie rzeczywistym kazdy skutek ma swoja przyczyne, a my umownie niektore z nich nazywamy losowymi i ustalamy granice dokladosci...

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