Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.01.2012, 10:07
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 11  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
С целочисленными без циклов можно так:
Код AS3:
/**
 *  min < max;
 *  min <= excluded
 *  min <= result < max
 */
function randomInt( min:int, max:int, excluded:int ) : int
{
	var r:int = min + (max - min - 1) * Math.random();
	return r + int(r >= excluded);
}
 
 
var matches:Array = new Array();
var i:int = 10000;
while (i--)
{
	var j:int = randomInt(10, 30, 13);
	if (matches[j] === undefined)
		matches[j] = 0;
	else
		matches[j]++;
}
 
for (i=10; i < 30; i++)
{
	trace("[" + i + "]: " + matches[i]);
}
Код:
[10]: 480
[11]: 489
[12]: 521
[13]: undefined
[14]: 513
[15]: 511
[16]: 548
[17]: 525
[18]: 546
[19]: 569
[20]: 523
[21]: 571
[22]: 492
[23]: 550
[24]: 495
[25]: 534
[26]: 544
[27]: 527
[28]: 547
[29]: 496


Последний раз редактировалось i.o.; 29.01.2012 в 10:14.
Старый 29.01.2012, 10:55
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 12  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от TanaTiX Посмотреть сообщение
[b]теряется равномерность рэндома (с учетом всех его недостатков во флеше)
А можно подробнее о недостатках?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 29.01.2012, 11:24
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 13  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
HardCoder, если погуглить, то можно найти информацию о том, что рэндом во флеше... Скажем так, не на столько случайный, как хотелось бы. Хотя для флеша это практически роли не играет. Я это добавил только справедливости ради.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 29.01.2012, 11:50
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 14  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Wolsh, нет не исключаются. Для них условие по идее никогда не выполнится. Т.к. Math.random() никогда не равен 1 (см. доки). Хотя возможно при каких-то значениях min и max и максимальном Math.random() выражение Math.random() * (max - min) + min будет равно max из-за ошибок округления =)
TanaTiX
опс, перепутал тела функций 0_0
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 29.01.2012 в 12:21.
Старый 29.01.2012, 12:32
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 15  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от TanaTiX Посмотреть сообщение
HardCoder, если погуглить, то можно найти информацию о том, что рэндом во флеше... Скажем так, не на столько случайный, как хотелось бы.
Я свой вопрос задал, потому что люблю, когда вещи называют своими именами. Очень режет слух слишком смелые высказывания о том, что когда Math.random() выдает не то что хочет видеть человек - называть его "не слишком случайным". Если нужно 10 раз получить случайное число в диапазоне от 0 до 3, рэндом 7 раз может вывести 0, один раз 1, один раз 2 и один раз 3. (цифры от фонаря взял). Вот это случайность - ее невозможно предугадать. А нам нужно, чтоб 0, 1, 2, 3 выпадали с некоей равномерностью. Поэтому нельзя обвинять рэндом в неслучайности, когда нам нужна не случайность, а закономерность. Я когда-то долго искал ОБЪЕКТИВНЫЕ доказательства неслучайности рэндома. И до сих пор не нашел, поэтому и задал вопрос. Согласен - для создания приложений такая абсолютная случайность иногда не подходит, поэтому нужно писать разные алгоритмы, чтобы числа выбрасывались с некоторой равномерностью.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 29.01.2012, 12:57
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 16  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Цитата:
Поэтому нельзя обвинять рэндом в неслучайности, когда нам нужна не случайность, а закономерность.
Спорить не буду, к тому же мне "случайности" рэндома всегда хватало, а такую информацию получил когда-то, бороздя просторы интернета. Есть разные точки зрения на этот счет (в т.ч. аргументированные); как уже говорил, написал эту информацию исключительно ради справедливости, а не для очередного холивара и массовых проверок.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 29.01.2012, 13:01
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 17  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от TanaTiX Посмотреть сообщение
как уже говорил, написал эту информацию исключительно ради справедливости, а не для очередного холивара и массовых проверок.
Согласен. Да умрет холивар в этой теме!
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 29.01.2012, 17:10
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 18  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Wolsh, нет не исключаются. Для них условие по идее никогда не выполнится.
Ага. Поэтому trace(randomInt(0, 5, 6)); никогда не выдаст 5. Ситуация с параметрами может и лукавая, но вполне вероятная на практике.
Еще у этого алгоритма одно из чисел диапазона никогда не выдается в первой десятке результатов, что прискорбно((

Добавлено через 27 минут
Сама идея замены совпадения с исключением на сознательно негенерируемый max весьма элегантна.
Претензия только к тому, что поведение при таких параметрах "удивляет", то есть не соответствует ожидаемому.
__________________
Reality.getBounds(this);

Старый 29.01.2012, 18:02
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 19  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
такой еще вариант до кучи )
Код AS3:
public function random(min:int, max:int, except:int):int
{
 
	if (Math.random() < (except - min) / (max - min))
	{
		return min + int(Math.random() * (except - min));
	}else
	{
		return max - int(Math.random() * (max - except));
	}
}

Старый 29.01.2012, 19:53
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 20  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Тут очень много зависит от того, что именно вы называете случайным числом. Фишка в том, что ни один из приведенных выше примеров скорее всего не пройдет diehard test, не смотря на то, что число, вобщем-то будет "случайным".
Вариант о котором я думал: выбирать случайно из двух диапазонов: min<exclude и exclude>max - но это расточительно, если нужно часто радном генерировать.
А можно полюбопытствовать, зачем это понадобилось, и на скольк важна правильная (взвешенная) рандомность?

silin: О, я твой вариант не видел, когда писал, я вот тоже о чем-то таком думал, только не нужно два раза random() вызывать. Если закешировать первый вызов и им и воспользоваться, то и дешевле выйдет и больше вероятность, что в итоге распределение будет правильным.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 29.01.2012 в 20:03.
Создать новую тему Ответ Часовой пояс GMT +4, время: 12:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
random

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.