Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

Странная работа генератора случайных чисел

Больше
6 года 9 мес. назад - 6 года 9 мес. назад #112776 от tvorimvsevmeste
Не понимаю чем вызвано следующее поведение. Вот содержимое события:

Вот что оно периодически выдаёт:

Это вообще как может быть?
Наверное причина всё же в чём-то другом. Но в чем?
Подскажите пожалуйста, если знаете причину!

Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Последнее редактирование: 6 года 9 мес. назад пользователем tvorimvsevmeste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад #112790 от tvorimvsevmeste
1. Это – RMMV 161.
2. Глюк одинаково выдает и стимовская и палёная версия с торрентов.
3. Естественно, не факт, что выбросит с первого запуска. Это случайное число. Поэтому выброс "диких" чисел происходит изредка, с раза 10-15-ого.
4. оставил одну карту и всё: yadi.sk/d/8pt8ogj7MMB4RA

Поживем — увидим,
доживем — узнаем,
переживем — научимся…

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад #112792 от KageDesu
Code:
Math.round(Math.random() * (MAX - MIN)) + MIN

Заместо MAX и MIN наибольшее и наименьшее число, включительно.




На скриншоте MAX = 4, MIN = 1
Спасибо сказали: tvorimvsevmeste, NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад #112793 от tvorimvsevmeste
Спасибо за полезное паллиативное решение.
Однако все же интересно в чём проблема?
Что, штатное средство для генерации случайных значений использовать нельзя вообще?

Поживем — увидим,
доживем — узнаем,
переживем — научимся…

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
6 года 9 мес. назад #112805 от yuryol

KageDesu пишет:

Code:
Math.round(Math.random() * (MAX - MIN)) + MIN


можно подсчитать насколько верно работает рандом по этой формуле:
Code:
var arr = ["вне выборки",0,0,0,0]; for(let i = 0; i<1000; i++) { let a = Math.round(Math.random() * (4 - 1)) + 1; arr[a]++; } console.log(arr);

запустил три раза в браузере,вывелось:
["вне выборки", 152, 349, 319, 180]
["вне выборки", 161, 322, 341, 176]
["вне выборки", 169, 322, 341, 168]

таким образом, максимальное и минимальное число будет выпадать почти в 2 раза реже,чем остальные.

всё из-за округления:
- до единицы округлятся числа с 1 до 1,49
- до четверки округлятся числа с 3,5 до 4
- до двойки округлятся числа с 1,5 до 2,49 (в два раза больше чисел)
- до тройки округлятся числа с 2,5 до 3,49 (тоже в два раза больше чисел)


что делать?

чтобы это исправить надо к максимальному прибавить единицу к разнице максимального и минимального числа и затем отнять половинку от минимального, чтобы расширить ему диапазон:
Code:
var arr = ["вне выборки",0,0,0,0]; for(let i = 0; i<1000; i++) { let a = Math.round(Math.random() * (4 - 1 + 1) + 1 - 0.5); arr[a]++; } console.log(arr)

запустил три раза, вывелось:
["вне выборки", 255, 236, 250, 259]
["вне выборки", 255, 256, 239, 250]
["вне выборки", 259, 249, 247, 245]

итого - правильный рандом.
Спасибо сказали: NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
6 года 9 мес. назад #112806 от Lekste
Норм. Одно не ясно: зачем (4 - 1 + 1)? :)
Спасибо сказали: NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад #112808 от tvorimvsevmeste
Уважаемые эксперты, погодите!
Вопрос был что за чудеса со ШТАТНЫМ рандомизатором!
А не как изобрести костыли, непонятные обычному пользователю RPG Maker-a!!!

Поживем — увидим,
доживем — узнаем,
переживем — научимся…

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

1 место в Готв Проект месяца 1 место 2 место Учитель Проект месяца 2 место Проект месяца 3 место 3 место Готв Разработчик Коммерсант Проект года 3 место
Больше
6 года 9 мес. назад #112809 от peter8031983

tvorimvsevmeste пишет: Уважаемые эксперты, погодите!
Вопрос был что за чудеса со ШТАТНЫМ рандомизатором!
А не как изобрести костыли, непонятные обычному пользователю RPG Maker-a!!!

ТЫ ОТКРЫЛ ЯЩИК ПАНДОРЫ!
Я не качал демку, нет МВ под рукой, но три года работал с рандомом МВ и ни разу не видел таких проблем. Могу сказать, что чаще всего дело в собственных кривых ручках. Например та же переменная фигурирует ещё в каком процессе параллельном. Например каком нить выяснении координат. В отличии от прошлых версий, МВ параллельные процессы работают реально параллельно. Например даже во время вывода текста, чего не было раньше...
Слава богу есть кнопка Найти и там можно посмотреть куды ещё ты сунул эту переменную.(не работает, если сунул кодом конечно)

Как-то так...

Ну и не исключено, что могли накосячить и сами разрабы. Они отличаются редкой рукожопостью и доказывают это от версии к версии, отчего я и ушёл с МВ по большей части...
Спасибо сказали: tvorimvsevmeste, NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Организатор конкурсов Тестер Ветеран
Больше
6 года 9 мес. назад #112818 от VarVarKa
Мейкер всё генерирует нормально, а вот ручки, действительно, кривые!!!
Помимо указанного события:
ВНИМАНИЕ: Спойлер!

есть ещё одно:
ВНИМАНИЕ: Спойлер!

которое задаёт эту же переменную. И если первое автоматическое событие задаёт значение переменной один раз, то другое параллельное событие обновляет его постоянно и именно результат этого события выводится в сообщении!!!
Спасибо сказали: tvorimvsevmeste, SiQiuRi

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад #112824 от tvorimvsevmeste
О! Большое спасибо! Теперь буду особенно обращать внимание на возможную "параллельность"!

Поживем — увидим,
доживем — узнаем,
переживем — научимся…

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 9 мес. назад - 6 года 9 мес. назад #112883 от tvorimvsevmeste
Покопался в выдавшееся свободное время. Разобрался, как это сделается, если отоспаться хотя бы часов 8.
Вот голый пример:
yadi.sk/d/oBziLI5mvU5XpQ
Если кратко, то для того, чтобы при выходе с карты не сохранялись состояние локальных переключателей, использую переменную, которую инициализирую генератором случайных чисел.
И никакая параллельность выполнения, кстати, не мешает: значение переменной меняется только в одном месте, а на получение значения переменной параллельность обращений не влияет!
Затем используем if-elseif, который обеспечивает комбинация страниц в событиях со сравнением использующем >=




Конечно, записывать надо именно в такой последовательности – наоборот, ЕСТЕСТВЕННО, будет неправильно!
Так что этим примером можно пользоваться.

Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Последнее редактирование: 6 года 9 мес. назад пользователем tvorimvsevmeste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.109 секунд
Работает на Kunena форум