Skocz do zawartości
Threef

random

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.

Udostępnij tego posta


Odnośnik do posta
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ć?

Udostępnij tego posta


Odnośnik do posta
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)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Sprawdziłem. Losowość liczb jest stała. Sprawdziłem też jaki seed mi zwraca

seed 151156142

random 64.75

real(d) 151156142

I takie wyniki otrzymywałem przy wszystkich uruchomieniach.

Udostępnij tego posta


Odnośnik do posta
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

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Wszystkie liczby w GM są przechowywane w pamięci jako 32 bitowe

Jak to? Przed chwilą sprawdziłem i mogłem spokojnie działać na liczbach większych od 2^40, zawsze myślałem, że liczby w GM-ie są typu double.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Zmienna zapisywała się jako większa wartość, ale argument dla random_set_seed() nie przyjmuje większych liczb.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A to już można zgłosić jako buga :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×