Skocz do zawartości

random


Threef

Rekomendowane odpowiedzi

Cześć wszystkim.

 

Wydaje mi się że najnowszy update GM:S czyli v1.4.1675 może mieć problemy z liczbami losowymi. W changelog wersji jest wyraźnie wyszczególnione że zmieniony został sposób w jaki liczby losowe są generowane.

 

Z tego co zaobserwowałem to ustawienie seed nie ma wpływu na resztę funkcji. Nie ważne czy randomize() czy random_set_seed() nie ma to wpływu. random_get_seed() zwróci nowo wygenerowany seed, ale random() korzysta jakby z innego seedu. Ten inny seed jest resetowany do pierwotnej pozycji przy każdym użyciu randomize() albo random_set_seed(), ale nie na seed jaki oczekujemy.

 

Sprawdźcie u siebie czy to nie będzie zwracać różnych liczb:

GML (step)
randomize()

show_debug_message(random(100))

 

Edit: Sam się teraz gubię. Nie wiem co jest co. Dalej nie działa jak powinno.

Odnośnik do komentarza
Udostępnij na innych stronach

11.81

60.37

94.12

74.48

89.82

 

9.60

76.37

15.88

29.87

82.80

6.11

 

Pierwsze 5 liczb z dwóch uruchomień.

(kod wrzuciłem w draw_gui, nie wiem czemu)

Po ustawieniu seedu na 100, zwraca mi, że seed to 100, a liczby random są zawsze te same.

//edit, czyli chyba wszystko dobrze, coś sprawdzić?

Odnośnik do komentarza
Udostępnij na innych stronach

To może dokładnie podam co robię.

GML
d=string(global.zmienna1*(current_year-2000)) +string(current_month) +string(global.zmienna2*current_day) +string(current_hour) +string(floor(current_minute/15))

random_set_seed(real(d))

 

Teraz się zastanawiam czy np jest maksymalna wartość jaką może przybrać seed.

 

Edit:

To już działa: o_0

GML
random_set_seed(real(d)/1000)
Odnośnik do komentarza
Udostępnij na innych stronach

Problem rozwiązany. Trochę włosów wyrwałem bo raz działało a raz nie. Winę zwaliłem na update, bo błąd wystąpił pierwszy raz po jego zainstalowaniu i w changelogu były opisane zmiany co do seedów.

 

Seed jaki mi się ustawiał to 2147483648.

 

A ja jestem idiotą. :) Wszystkie liczby w GM są przechowywane w pamięci jako 32 bitowe.

All real numbers are stored as 32bit floating point values

A jak cytuje wikipedia:

A signed 32-bit integer can have a maximum value of 231 - 1 = 2,147,483,647

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...