Войти на сайт

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

ТЕМА: Странная работа генератора случайных чисел

Странная работа генератора случайных чисел 5 года 3 мес. назад #112776

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Не понимаю чем вызвано следующее поведение. Вот содержимое события:
event1.png

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

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

Странная работа генератора случайных чисел 5 года 3 мес. назад #112790

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
1. Это – RMMV 161.
2. Глюк одинаково выдает и стимовская и палёная версия с торрентов.
3. Естественно, не факт, что выбросит с первого запуска. Это случайное число. Поэтому выброс "диких" чисел происходит изредка, с раза 10-15-ого.
4. оставил одну карту и всё: yadi.sk/d/8pt8ogj7MMB4RA
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.

Странная работа генератора случайных чисел 5 года 3 мес. назад #112792

  • KageDesu
  • KageDesu аватар
  • Вне сайта
  • Мастер
  • Сообщений: 101
  • Спасибо получено: 346
Math.round(Math.random() * (MAX - MIN)) + MIN

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


2019-07-27_19-49-14.png


На скриншоте MAX = 4, MIN = 1
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: tvorimvsevmeste, NeKotZima

Странная работа генератора случайных чисел 5 года 3 мес. назад #112793

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Спасибо за полезное паллиативное решение.
Однако все же интересно в чём проблема?
Что, штатное средство для генерации случайных значений использовать нельзя вообще?
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.

Странная работа генератора случайных чисел 5 года 3 мес. назад #112805

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • Композитор2 место Победитель конкурса1 место в ГотвУчительОратор3 место ГотвОрганизатор конкурсов
KageDesu пишет:
Math.round(Math.random() * (MAX - MIN)) + MIN

можно подсчитать насколько верно работает рандом по этой формуле:
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 (тоже в два раза больше чисел)


что делать?

чтобы это исправить надо к максимальному прибавить единицу к разнице максимального и минимального числа и затем отнять половинку от минимального, чтобы расширить ему диапазон:
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

Странная работа генератора случайных чисел 5 года 3 мес. назад #112806

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяПрограммист JavaScript ОраторПрограммист RubyВетеран
Норм. Одно не ясно: зачем (4 - 1 + 1)? :)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: NeKotZima

Странная работа генератора случайных чисел 5 года 3 мес. назад #112808

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Уважаемые эксперты, погодите!
Вопрос был что за чудеса со ШТАТНЫМ рандомизатором!
А не как изобрести костыли, непонятные обычному пользователю RPG Maker-a!!!
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.

Странная работа генератора случайных чисел 5 года 3 мес. назад #112809

  • peter8031983
  • peter8031983 аватар
  • Вне сайта
  • Просветлённый
  • Добро-вещь относительная.
  • Сообщений: 469
  • Спасибо получено: 662
  • Проект года 3 место2 место Проект месяца 1 местоКоммерсантРазработчикУчительПроект месяца 2 местоПроект месяца 3 место3 место Готв1 место в Готв
tvorimvsevmeste пишет:
Уважаемые эксперты, погодите!
Вопрос был что за чудеса со ШТАТНЫМ рандомизатором!
А не как изобрести костыли, непонятные обычному пользователю RPG Maker-a!!!
ТЫ ОТКРЫЛ ЯЩИК ПАНДОРЫ!
Я не качал демку, нет МВ под рукой, но три года работал с рандомом МВ и ни разу не видел таких проблем. Могу сказать, что чаще всего дело в собственных кривых ручках. Например та же переменная фигурирует ещё в каком процессе параллельном. Например каком нить выяснении координат. В отличии от прошлых версий, МВ параллельные процессы работают реально параллельно. Например даже во время вывода текста, чего не было раньше...
Слава богу есть кнопка Найти и там можно посмотреть куды ещё ты сунул эту переменную.(не работает, если сунул кодом конечно)

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

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

Странная работа генератора случайных чисел 5 года 3 мес. назад #112818

  • VarVarKa
  • VarVarKa аватар
  • Вне сайта
  • Мастер
  • Сообщений: 235
  • Спасибо получено: 685
  • Организатор конкурсовВетеранПроект месяца 3 местоТестерПроект месяца 1 местоПроект месяца 2 место
Мейкер всё генерирует нормально, а вот ручки, действительно, кривые!!!
Помимо указанного события:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

есть ещё одно:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

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

Странная работа генератора случайных чисел 5 года 3 мес. назад #112824

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
О! Большое спасибо! Теперь буду особенно обращать внимание на возможную "параллельность"!
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.

Странная работа генератора случайных чисел 5 года 3 мес. назад #112883

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Покопался в выдавшееся свободное время. Разобрался, как это сделается, если отоспаться хотя бы часов 8.
Вот голый пример:
https://yadi.sk/d/oBziLI5mvU5XpQ
Если кратко, то для того, чтобы при выходе с карты не сохранялись состояние локальных переключателей, использую переменную, которую инициализирую генератором случайных чисел.
И никакая параллельность выполнения, кстати, не мешает: значение переменной меняется только в одном месте, а на получение значения переменной параллельность обращений не влияет!
Затем используем if-elseif, который обеспечивает комбинация страниц в событиях со сравнением использующем >=
2019-08-03_21-15-48.png

2019-08-03_21-16-07.png

2019-08-03_21-16-34.png

2019-08-03_21-16-47.png

Конечно, записывать надо именно в такой последовательности – наоборот, ЕСТЕСТВЕННО, будет неправильно!
Так что этим примером можно пользоваться.
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Последнее редактирование: 5 года 3 мес. назад от tvorimvsevmeste.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.432 секунд