Здравствуйте. Разрешите обратиться? Спасибо, обращаюсь
Реальная задача: покер, раздача карт на 2 или более игроков, количество вариантов (строк) любое (задается).
На основе задачи состряпал пример - 10 случайных уникальных чисел в строке. Два доп. столбца (A:B) - для помощи в подсчете повторов. Повторы (все дублированные) считаются в L2. Третий доп. столбец (справа, M) показывает позицию дубля строки. Галка - условие запуска ГСЧ (вкл/выкл)
Для уменьшения размера файла формулы в доп. столбцах удалены. Растянуть на нужное количество строк.
Обнаружил непонятное поведение Randomize: генератор случайных величин помогает создавать одинаковые числовые последовательности! и хочу понять причину этой ошибки
Варианты 1-2.
UDF не используем. Случайные значения получаем в основном макросе, Randomize есть/нет.
Результат - повторов не обнаружено.
Вариант 3.
UDF используем. Без Randomize
Результат - повторов не обнаружено.
-------------- дальше интереснее --------------------------------------------------------------------------------
Вариант 4.
UDF используем. Randomize включаем напрямую, без условия Randomize вкл/выкл.
Результат - повторы строк зашкаливают. На 1000 вариантов строк с дублями - более 800
Вариант 5.
UDF используем. Randomize включаем через условие "Randomize вкл/выкл."
Результат - повторы есть, но на порядок меньше - не более 80
Еще наблюдение (проверять на варианте 4, там нагляднее).
Количество дублей одной строки зависит от количества строк. Это понятно - больше вариантов, больше вероятность повтора. Интересно другое: дубли повторяются через определенный промежуток. Количество строк в промежутке зависит от количества выводимых значений в одной строке! 10 значений - дубль через 26 строк, 6 значений - через 47-49 строк, при 4 значениях - через 81-82 строки...
Вопросы. Как объяснить такое нехорошее поведение генератора (вар. 4 и 5)?
1. Почему при включении генератора отдельной UDF последовательности дублируются?
2. Почему при включении Randomize через If дублей гораздо меньше?
3. Почему дубли повторяются через определенный промежуток?
Win7, Office-10, 32-bit
Реальная задача: покер, раздача карт на 2 или более игроков, количество вариантов (строк) любое (задается).
На основе задачи состряпал пример - 10 случайных уникальных чисел в строке. Два доп. столбца (A:B) - для помощи в подсчете повторов. Повторы (все дублированные) считаются в L2. Третий доп. столбец (справа, M) показывает позицию дубля строки. Галка - условие запуска ГСЧ (вкл/выкл)
Для уменьшения размера файла формулы в доп. столбцах удалены. Растянуть на нужное количество строк.
Обнаружил непонятное поведение Randomize: генератор случайных величин помогает создавать одинаковые числовые последовательности! и хочу понять причину этой ошибки
Варианты 1-2.
UDF не используем. Случайные значения получаем в основном макросе, Randomize есть/нет.
Результат - повторов не обнаружено.
Вариант 3.
UDF используем. Без Randomize
Результат - повторов не обнаружено.
-------------- дальше интереснее --------------------------------------------------------------------------------
Вариант 4.
UDF используем. Randomize включаем напрямую, без условия Randomize вкл/выкл.
Результат - повторы строк зашкаливают. На 1000 вариантов строк с дублями - более 800
Вариант 5.
UDF используем. Randomize включаем через условие "Randomize вкл/выкл."
Результат - повторы есть, но на порядок меньше - не более 80
Еще наблюдение (проверять на варианте 4, там нагляднее).
Количество дублей одной строки зависит от количества строк. Это понятно - больше вариантов, больше вероятность повтора. Интересно другое: дубли повторяются через определенный промежуток. Количество строк в промежутке зависит от количества выводимых значений в одной строке! 10 значений - дубль через 26 строк, 6 значений - через 47-49 строк, при 4 значениях - через 81-82 строки...
Вопросы. Как объяснить такое нехорошее поведение генератора (вар. 4 и 5)?
1. Почему при включении генератора отдельной UDF последовательности дублируются?
2. Почему при включении Randomize через If дублей гораздо меньше?
3. Почему дубли повторяются через определенный промежуток?
код | ||
---|---|---|
|
Win7, Office-10, 32-bit