![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Random глючит... [D6, Win95/98, WinXP]
_vitek_ © (2003-01-25 02:56:00)Может кто сталкивался с проблемой генерирования случайных чисел... у меня они какие-то не случайные получаются ...
Пишу random(x) ... далее в проге идёт всяческая обработка ...
при запуске программы повторно, чила, зависящие от random-a те же.. В чём может быть проблема?
Dms (2003-01-28 16:12:00) [21]
> Random плох в том смысле, что, как тут было сказано, во
> все отрезки интервала, соответсвующего 32 битам, он будет
> попадать строго одинаковое количество раз. Именно это не
> отвечает проявлениям реального мира.
по моему ты погорячился ...
Anatoly Podgoretsky (2003-01-28 15:18:00) [22]Глюк как всегда в голове
Юрий Зотов (2003-01-28 15:10:00) [23]> malkolinge
Разные версии библиотеки компилятора реализуют разные алгоритмы Random. Ну и что здесь странного? Наоборот, было бы странно, если бы компилятор и его библиотека не совершенствовались.
При этом любая версия гарантирует, что Random дает псевдослучайное равномерно распределенное число, и что без использования Randomize последовательность этих чисел будет строго одна и та же, а с использованием Randomize вероятность ее повтора составляет мизерную величину.
И в чем же глюк?
uw (2003-01-28 13:45:00) [24]Смысл нормального распределения такой. Бросаем монету много раз. Если она не кривая, т.е. распределение равномерное, то примерно в половине случаев выпадет орел. Так вот отклонение количества отклонений от этой половины и подчиняется нормальному закону - чем больше отклонение, тем меньше вероятность наблюдения такого отклонения.
Точно так же, если мы бросаем предмет на отрезок с равновероятным распределением, то количество попаданий предмета на некоторую седьмую часть отрезка составит примерно одну седьмую часть бросков. Отклонение от этого количества опять подчинено нормальному закону.
Random плох в том смысле, что, как тут было сказано, во все отрезки интервала, соответсвующего 32 битам, он будет попадать строго одинаковое количество раз. Именно это не отвечает проявлениям реального мира.
han_malign (2003-01-28 13:08:00) [25]Не помню чья теорема: При суммировании N элементов случайной последовательности с равномерным распределением, при стремлении N к бесконечности, распределение последовательности сумм будет стремиться к нормальному.(естественно для плотного диапазона вещественных чисел)
han_malign (2003-01-28 12:57:00) [26]Хорошо закоментированный баг, это не глюк а ФИЧА ! :)
- дам примерный перевод выдержки из - хелпа: мы не рекомендуем использовать Random для кодирования и в других случаях, когда требуется воспроизводимая последовательностьпсевдо-случайных чисел.
То есть то, что от версии к версии Delphi может давать разные последовательности чисел, при одинаковом начальном RandSeed, вы считаете глюком?(предыдущий тезис:"при запуске программы повторно, чила, зависящие от random-a те же")
З.Ы. При этом алгоритм Random гарантирует, что при переборе всех значений диапазона(32 бита), каждое значение повторится один и только один раз...
malkolinge (2003-01-28 12:37:00) [27]
> Anatoly Podgoretsky © (28.01.03 12:12)
> Почему ты называешь это глюком?
Тут согласен. Хорошо закоментированный баг, это не глюк а ФИЧА ! :)
Anatoly Podgoretsky (2003-01-28 12:12:00) [28]Почему ты называешь это глюком?
malkolinge (2003-01-28 12:08:00) [29]
> Юрий Зотов © (25.01.03 13:36)
> > Art © (25.01.03 13:21)
>
> > в дельфях рандом натурально гонимый
>
> Смелое утверждение. А доказать можете? Ну хоть чуть-чуть?
Я смогу, вот вырезка из Хелпа по рандому
Note: Because the implementation of the Random function may change between compiler versions, we do not recommend using Random for encryption or other purposes that require reproducible sequences of pseudo-random numbers.
А вообще-то про генераторы псевдослучайных чисел правильно сказанно, надо свой писать (длся серьезных задач) тот же регистр циклический регистр, желательно с суммированием по разрядам. Хотя для перестановки 3 вопросов в разном порядке городить ТАКОЕ на мой ИМХО не стоит :)
Dms (2003-01-28 11:33:00) [30]Любая сгенерированная последовательность будет ПСЕВДОслучайной, для генерации АБСОЛЮТНО случайных величин используют приемник "белого шума". Все дело в количестве факторов, влияющих на последовательность, а в этом случае их почти бесконечное количество :) ...
uw (2003-01-28 10:59:00) [31]>SuperUmnik © (27.01.03 07:52)
Берем кость и бросаем. На отрезке [1, 6] никакого гаусса.
Garry_Dorado (2003-01-28 10:51:00) [32]А почему бы просто не реализовать этот самый random самому? Делается это на регистре сдвига с обратной связью через ИСКЛ. ИЛИ. В рез. получается ПСП период повторения которой зависит от длины регистра и количества обратных связей.
Юрий Зотов (2003-01-27 08:29:00) [33]> SuperUmnik © (27.01.03 07:52)
Sorry, но это, IMHO, какие-то новое слово в теории Вы сказали.
> т.к. число псевдослучайное то распределение чисел на отрезке
> равномерное.
Разве одно следует из другого? Разве вид распределения определяется псевдо или не псевдослучайностью? До сих пор я полагал, что алгоритмом генерации.
> в то время как истинно случайная выборка чисел на отрезке
> распределяется по Гауссу.
То есть, равномерное, лог-нормальное и прочие распределения не являются истинно случайными? А какими тогда? Неистинными? А что такое истинная и неистинная случайность? И разве гауссовский ДСЧ не может быть точно таким же псевдослучайным?
> поэтому для игрушек и прочего рандомизе использовать можно.
> а вот для поведения различных серьезных статистических моделей
> эту разницу всегда надо учитывать.!
Учитывать, конечно, надо. Только причем здесь игрушки или неигрушки? Надо просто брать именно то распределение, которое требуется именно для ДАННОЙ задачи. Нужно равномерное - берем равномерное, нужен Гаусс - берем Гаусса, нужно бимодальное - берем бимодальное. И т.д. При чем тут игрушки и неигрушки? Разве в серьезных моделях не используется равномерное распределение? Да сколько угодно.
Anatoly Podgoretsky (2003-01-27 08:04:00) [34]Есть ли кто ниюудь, кто обнаружил глюк в Random, именно глюк а не свои кривые ручки?
SuperUmnik (2003-01-27 07:52:00) [35]Как известно рандомизе псевдослучайное число т.к.задается по формуле период начала повторимости очень большой. но т.к. число псевдослучайное то распределение чисел на отрезке равномерное. в то время как истинно случайная выборка чисел на отрезке распределяется по Гауссу. поэтому для игрушек и прочего рандомизе использовать можно. а вот для поведения различных серьезных статистических моделей эту разницу всегда надо учитывать.!
Sha (2003-01-26 13:06:00) [36]> Art © (26.01.03 08:36)
> Вообще рандом это такая проблема...
Проблема только в том случае, если рандом используется неправильно.
Игровые автоматы и шифрование используют другие функции.
Юрий Зотов (2003-01-26 11:47:00) [37]> Art © (26.01.03 08:36)
Еще раз - это не от корявости, это сделано специально. Иначе некоторые алгоритмы было бы очень трудно (практически невозможно) отлаживать.
Для того и введена Randomize. Она инициализирует начальное число ДСЧ исходя, например, из текущего времени суток в миллисекундах. В итоге при каждом запуске программы получается разнаяпоследовательность случайных чисел с вероятностью ее повтора, равной 1/86400000 (число миллисекунд в сутках).
Art (2003-01-26 08:36:00) [38]Вообще рандом это такая проблема ... ведь получается что если рэндом работает по формуле то следовательно можно найти все варианты которые выпадут вперед т.е. игровым автоматам крышка, шифрованию по случайным числам тоже крышка и т.д. (кстати сделайте рэндомайз по одному и тому же значению на одном и том же компиляторе выпадут одни и теже числа, например я это использовал для шифрования). Я согласен что это от корявости но все же.
Юрий Зотов (2003-01-25 20:20:00) [39]> A2 (25.01.03 19:29)
Книга Кнута писалась несколько десятков лет тому назад. Конечно, переиздания дорабатывались. Конечно, она не перестала быть классикой. Тем более - очень слабо верится, что разработчики СОВРЕМЕННЫХ компиляторов и их библиотек не читали эту книгу. И не сделали из нее нужных выводов. И не использовали их.
A2 (2003-01-25 19:29:00) [40]Посмотри "Искуство программирования для ЭВМ" Д.Кнута, том2 - там очень доходчиво написано про то, как получить псевдослучайные последовательности с хорошими статистическими характеристиками. Кстати, с точки зрения Кнута, функции random большинства компиляторов реализованы плохо.