В предыдущих частях работы (Часть 1, Часть 2) мы разобрали, что такое линейный конгруэнтный метод (ЛКМ), и как на его основе работает функция Rnd(), вшитая в скриптовый язык VBA, созданный Microsoft. Именно эта функция и "ответственна" за генерацию псевдослучайных чисел. Мы поняли, как ведет себя функция, если в качестве ее аргумента ввести число меньшее либо равное 0. Также мы выяснили, что эта функция работает с мнимым и реальными значениями своих аргументов, также мы поняли, как соотносятся некоторые мнимые значения аргумента функции с их реальными значениями.
Рубрика «линейный конгруэнтный метод»
Как устроен генератор случайных чисел в VBA Excel Ч.3
2025-08-27 в 6:11, admin, рубрики: Excel, microsoft office, vba-макросы, генератор случайных чисел, генераторы случайных чисел, линейный конгруэнтный метод, псевдослучайные генераторы, псевдослучайные числа, случайные числаГенератор случайных чисел, застрявший на одном значении
2025-03-20 в 5:29, admin, рубрики: Nintendo, random number generator, super mario bros, баги, генератор случайных чисел, линейный конгруэнтный методМоё исследование посвящено мини-игре Green Toad House в New Super Mario Bros (NSMB). В этой мини-игре используется случайность, поэтому в процессе я изучил генератор случайных чисел (RNG) NSMB.
Чтобы пост не был слишком длинным, будем считать, что вы знаете, что такое RNG, а также о концепции порождающих значений (seed). Если нет, то вот хорошие ресурсы для изучения: pannenkoek2012 в YouTube (SM64), Retro Game Mechanics Explained в YouTube (SMW), Википедия.
Исследуем функцию
Генератор неслучайных чисел
2020-12-22 в 5:30, admin, рубрики: java, lcg, Алгоритмы, линейный конгруэнтный метод, математика, оптимизация алгоритмов, Серверная оптимизация, Статистика в ITЭтот код напечатает случайную последовательность латинских букв, так ведь?
import java.util.Random;
class WTF {
public static void main(String[] args) {
Random r = new Random(76880392499L<<11);
String alphabet = " abcdefghijklmnopqrstuvwxyz";
int n;
while ((n = r.nextInt(alphabet.length())) > 0)
System.out.print(alphabet.charAt(n));
}
}
Можете проверить; вывод кажется совсем не случайным. Как же так вышло?
Прежде всего: какой шанс, что из всех последовательностей латинских букв напечатается именно эта? Сгенерировано 10 случайных чисел, каждое выбиралось из 27 вариантов, значит всего вариантов было $inline$27^{10} approx 2.06cdot10^{14}$inline$. Если считать, что все варианты равновероятны, то нам выпал один шанс из двухста миллионов миллионов! Ух!Читать полностью »
