Просмотр полной версии : Как создать абсолютно случайное число
Здравствуйте. Как создать обсолютно случайное число в AC2? Дело в том что стандартным методом число все равно получается не обсолютно случайное. Может есть какой то метод который это сделает?
Что значит "абсолютно случайное" число?
Стандартный метод как раз генерирует абсолютно случайное число.
HardCoder
29.06.2011, 20:48
Math.random() генерирует числа так, что два значения могут совпасть лишь в одном случае из 1 000 000 000 000 000. Видимо топикстартеру этого мало :)
Math.random() генерирует числа так, что два значения могут совпасть лишь в одном случае из 1 000 000 000 000 000. Видимо топикстартеру этого мало :)
А напиши пожалуйста код как им правильно пользоваться чтоб так получилось?
HardCoder
29.06.2011, 21:01
for(i=0; i<1000000000000000; i++){
trace(Math.random());
}
Добавлено через 1 минуту
Проверьте окно output. Если найдете хоть два одинаковых значения, сообщите.
Psycho Tiger
29.06.2011, 21:09
В макромире абсолютных случайностей не существует. Math.random, всё же, даёт псевдослучайное число.
HardCoder
29.06.2011, 21:15
Откуда, тогда компьютер берет эти числа?
Добавлено через 5 минут
Если есть какой-то алгоритм, то число уже не может быть случайным, его можно предсказать, но оно не повторится до определенного количества итераций (алгоритм не позволит). Если же: цитата, не буду говорить откудатемпературу с процессора, умножаем на сумму приращений координат курсора мыши за последние две секунды, интегрируем по сканкодам последних нажатых клавиш, и добавляем произведение времени на напряжение в сети. Можно добавить деление на контрольную сумму последнего пакета, пришедшего на сетевой контроллерто число получается абсолютно случайным.
Psycho Tiger
29.06.2011, 21:34
Тогда выдернув сетевой кабель из компьютера, и не подходя к мышке и клавиатуре я всегда буду получать одни и те же числа? Кстати, насколько я помню — напряжение в сети измеряется его действующим значением, которое константно и в 1.4 раза меньше его максимальной амплитуды.
Почему "нельзя предсказать" число, которое получится в результате действий, которые Вы описали? То, что нельзя предсказать — нельзя построить мат. модель, а значит, нельзя просчитать математически. Такое на компьютере не реализовать.
Вообще, Psycho Tiger прав на счет того, что число не совсем случайное. Я уже давно об этом читал, и не в одной книжке. Но учитывая то, на сколько разные генерируются числа, думаю, их можно приравнять к случайным. По крайней мере то, для чего они создавались, с их помощью можно выполнить.
Проблема не в том что Math.random() не случайно. Дело в том, что таблица случайных чисел не создаёт белого шума.
Проверить легко.
Заполните экран 100500 случайных точек. Равномерного распределения не будет. Будет некий муар, показывающий псевдослучайную природу этих чисел. Варианты с температуру с процессора, умножаем на сумму приращений координат курсора мыши за последние две секунды, интегрируем по сканкодам последних нажатых клавиш, и добавляем произведение времени на напряжение в сети. Можно добавить деление на контрольную сумму последнего пакета, пришедшего на сетевой контроллер
тоже не дадут равномерного распределения, т.к. составляющие случайности - не случайны :)
т.е. чисто статистически можно сказать что некоторые значения Math.random() могут появиться чаще чем другие, но это только на огромных статичестических выборках.
Ну в реально жизни тоже монетка может чаще падать решкой вверх =)
т.е. случайно, числа выпали не случайные :D
Можно создать платный сетевой сервис и продавать случайные числа.
Добавлено через 7 минут
Math.random() генерирует числа так, что два значения могут совпасть лишь в одном случае из 1 000 000 000 000 000. Видимо топикстартеру этого мало :)
И даже в этом случае их можно назвать случайными. Разве несовпадающие числа и случайные числа - это тождественные понятия?
Мерилом случайности (то есть насколько случайно, качественность случайности) как раз является причина появления того или иного числа - то ли это некий программный алгоритм, или физический процесс, или толпа людей от балды придумывает числа, и они перемножаются. А не то, совпадет ли число с уже как-то полученным.
Все гуглят "плотность распределения вероятности де Бройля"
Или "волна де Бройля"
Иначе тут вообще ни о чем.
Самым интересным, с математической точки зрения, среди полученных результатов следует, по-видимому, считать тот факт, что динамические уравнения стохастической механики – это нелинейные дифференциальные уравнения в частных производных, которые допускают линеаризацию, при этом полученные линейные уравнения формально совпадают с уравнением Шредингера.
Ну да, сразу всё понятно стало) Дарк, это-то тут причём? Решил сумничать? :)
Проблема в том, что с помощью random нельзя с большой точностью эмулировать поведение реальных случайных процессов. Простейший эксперимент по визуализации белого шума, как я писал выше, и тот уже не получится. Но если нам не нужна серия СТАТИСТИЧЕСКИХ экспериментов, а только ОДНА (несколько) случайная величина, то Math.random() вполне пригоден.
Вместо бройля гуглим - белый шум, распределение Гаусса и нормальное распределение.
Вот уж и поумничать нельзя :)))
HardCoder
30.06.2011, 12:21
Проблема не в том что Math.random() не случайно. Дело в том, что таблица случайных чисел не создаёт белого шума.
Проверить легко.
Заполните экран 100500 случайных точек. Равномерного распределения не будет. Будет некий муар, показывающий псевдослучайную природу этих чисел. Варианты с
тоже не дадут равномерного распределения, т.к. составляющие случайности - не случайны :)
т.е. чисто статистически можно сказать что некоторые значения Math.random() могут появиться чаще чем другие, но это только на огромных статичестических выборках.Я не знаком с теорией вероятности, но кажется мне что случайность - это как раз то что нам предоставляет Math.random();. Случайность о которой вы говорите - это чисто субъективное понятие. Тоесть, человеку дали расставить 10 кубиков на некой площади, он будет их ставить в произвольном порядке (какбы). И будет себе создавать иллюзию что эти точки случайные. На самом деле, человеческая природа заставит эту личность расставлять кубики на одинаковом раастоянии друг от друга, которое можно предсказать или вычислить. Мы будем делать это случайно, но равномерно. Компьютер же такой ошибки делать не будет. Он может создать два числа совсем близки друг к другу, а может, также и совсем далекие.
Поверьте, случайность, а вернее статистическая функция распределения (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_(%D1%81%D1%82%D0%B0%D1%82%D0 %B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0)) вероятностей некоего события, это совсем не субъективное понятие. Очень многие физические эксперименты (http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0) и расчёты, особенно связанные с квантовым поведением, или поведением большого числа частиц или событий связаны с этими понятиями. В этом и состоит критика "псевдослучайности" чисел используемых во многих языках программирования, что они не удовлетворяют понятию "реально случаны" что не позволяет их использовать в таких расчётах и эмуляции поведения физических законов.
Кроме физики есть ещё много применений равномерного распределения, от рисования равномерного гаусовского шума на текстурах, до научных предсказаний поголовья скота в Новой Зеландии.
Добавлено через 4 минуты
Вот смотрите пример. вы запрограммировали выпадения кубика по таблице случайных чисел.
Предсказать, что выпадет на конкретном броске нельзя, но например баг таблицы в том, что тройка будет выпадать чаще. В большой серии экспериментов есть бОльшая вероятность выиграть, если всё время ставить на 3.
Так же и в math.round может быть что числа 0.xxxxxxxx5 будут выпадать чаще, например в специфике какого-то округления, это не точно говорю, просто для примера.. и когда мы располагаем представление этих точек на экране мы вместо равномерного шума видим лесенку. А хотели получить равномерный шум. Вот и весь сказ.
Поверьте, случайность, а вернее статистическая функция распределения (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_(%D1%81%D1%82%D0%B0%D1%82%D0 %B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0)) вероятностей некоего события, это совсем не субъективное понятие. Очень многие физические эксперименты (http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0) и расчёты, особенно связанные с квантовым поведением, или поведением большого числа частиц или событий связаны с этими понятиями. В этом и состоит критика "псевдослучайности" чисел используемых во многих языках программирования, что они не удовлетворяют понятию "реально случаны" что не позволяет их использовать в таких расчётах и эмуляции поведения физических законов.
Кроме физики есть ещё много применений равномерного распределения, от рисования равномерного гаусовского шума на текстурах, до научных предсказаний поголовья скота в Новой Зеландии.
Добавлено через 4 минуты
Вот смотрите пример. вы запрограммировали выпадения кубика по таблице случайных чисел.
Предсказать, что выпадет на конкретном броске нельзя, но например баг таблицы в том, что тройка будет выпадать чаще. В большой серии экспериментов есть бОльшая вероятность выиграть, если всё время ставить на 3.
Так же и в math.round может быть что числа 0.xxxxxxxx5 будут выпадать чаще, например в специфике какого-то округления, это не точно говорю, просто для примера.. и когда мы располагаем представление этих точек на экране мы вместо равномерного шума видим лесенку. А хотели получить равномерный шум. Вот и весь сказ.
Ребят. я слышал что можно както использовать часы для получения случайного числа. напишите пожалуйста код если не сложно.
Да какой там код....
Кидаешь часы на пол и замеряешь расстояния между отлетевшими деталями.
Цифры будут АБСОЛЮТНО случайными.
Наиболее интересные результаты получаются при использовании часов от Tissot, Breguet, Patek Philippe и Rolex.
В догонку, вот алгоритмы получения более "случайной" таблицы псевдослучайных чисел)
Вихрь Мерсенна (http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%85%D1%80%D1%8C_%D0%9C%D0%B5%D1%80%D1%81%D0%B5%D0%BD%D0%BD%D0%B0)
http://en.wikipedia.org/wiki/Mersenne_twister
и даже тут:
http://www.flasher.ru/forum/blog.php?b=250
HardCoder
30.06.2011, 13:23
Вот смотрите пример. вы запрограммировали выпадения кубика по таблице случайных чисел.
Предсказать, что выпадет на конкретном броске нельзя, но например баг таблицы в том, что тройка будет выпадать чаще. В большой серии экспериментов есть бОльшая вероятность выиграть, если всё время ставить на 3.
Так же и в math.round может быть что числа 0.xxxxxxxx5 будут выпадать чаще, например в специфике какого-то округления, это не точно говорю, просто для примера.. и когда мы располагаем представление этих точек на экране мы вместо равномерного шума видим лесенку. А хотели получить равномерный шум. Вот и весь сказ.
Ну, с этим согласен, так как сам раньше сталкивался с этой проблемой: в игре "гонки" машинки появлялись чаще с правой стороны чем с левой. Тоесть Math.random(); в большинстве случаев выбрасывал больше чем 0.5 и это жутко бесило
Анекдот.
При приеме на работу.
- Кем хотите работать?
- Генератором случайных чисел.
- Как это?
- 1578
)))
for(i=0; i<1000000000000000; i++){
trace(Math.random());
}
Добавлено через 1 минуту
Проверьте окно output. Если найдете хоть два одинаковых значения, сообщите.
А можно как то сделать так чтоб эта функция выдавала значение не с плавающей запятой а целое?
Что мешает сделать, например так:
Math.round(Math.random() * 1000000)
?
HardCoder
30.06.2011, 17:14
А можно как то сделать так чтоб эта функция выдавала значение не с плавающей запятой а целое?Эта функция вообще не будет работь. Только, конечно, если где-то в настройках компилятора, или как там оно называется, поискать "максимальное время для выполнения кода" не 15 секунд, как в большинстве программ по умолчанию, а 3 месяца.
Psycho Tiger
01.07.2011, 03:04
HardCoder, как связано максимальное время выполнение кода с значением, возвращаемым Math.random ?
Он про
for(i=0; i<1000000000000000; i++){
2HardCoder если поищете? тут (на форуме) есть мой эксперимент по вычислению 2000!
Найдёте - дам пирожок. :)
Эта функция вообще не будет работь. Только, конечно, если где-то в настройках компилятора, или как там оно называется, поискать "максимальное время для выполнения кода" не 15 секунд, как в большинстве программ по умолчанию, а 3 месяца.
Вообще, этот цикл не выполнится потому, что максимальное значение int = 2147483647, а не из-за времени выполнения.
К слову, у меня он даже не компилируется. ФлешДевелоп просто вылетает с ошибкой
HardCoder
01.07.2011, 11:08
Вы не поверите, но у меня Флешдевелоп нормально запускает, мало того даже трейсит. Но только 15 секунд, далее вылетает ошибка.
Добавлено через 2 минуты
А! Да это наверное потому что я не типизировал переменную i. Код писал для ас2 и для тестирования я просто скопировал его отсюда.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.