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

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

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> выбирать случайно из двух диапазонов: min<exclude и exclude>max - но это расточительно
ровно на один Math.random(), едва ли не дешевле, чем другие выверты

а насчет diehard test, что-то не могу такой задачки для флеша вообразить даже

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну тут не только то, что дешевле, вовсе не факт, что Math.random() * Math.random() дают правильное распределение - надо тестировать.
А по поводу diehard тестов я не понял замечание - это как бы тесты для любого рандома, на чем хочешь пиши - они тестируют распределение. Т.е. есть определенные требования к равномерному распределению, например, проблема дня рождения (если предположить что вероятность того, что любой день в году может быть днем рождения кого-то из участников группы - нужно определенное количество человек для того, чтобы вероятность достигла определенного процента). Ну вот если бы приведенный алгоритм проверили таким тестом и получилось бы что вероятность 50% наступает не в группе из 10 человек, а из 5, то это значило бы, что алгоритм плохой (существуют коллизии) - ну а дальше уже, смотря для чего использовать. Если для игры в покер - то плохо, если выбрать в какой случайный цвет покрасить текст на открытке - то без разницы
__________________
Hell is the possibility of sanity

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
про diehard test понятно, непонятно какое это имеет отношение к сабжу,
Math.random() сам-то проходит?
если уровня Math.random() достаточно, то сгодится и то, что наворачивается на его базе, никаких сюрпризов с измением 50%-ной группы вдвое не ожидается, ну во всяком случае в варианте с диапазонами (№19)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Нет, нет такой зависимости. мы же не знаем точно какая реализация. Ксор-шифт рандом * ксор-шифт рандом, например, не пройдет. Math.random() заявлен как взвешеный рандом - значит должен, но я не проверял. По тем результатам которыми приходилось пользоваться - вроде прходит. Но нет такой гарантии, что композиция одной функции генерации взвешенного рандома с самой даст опять же взвешенный рандом. Ее по определению не может быть

ЗЫ. Там где звездочка имеется в виду не умножение а сложение функций, типа \circ в Латексе.
__________________
Hell is the possibility of sanity

Старый 30.01.2012, 02:58
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 25  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от silin Посмотреть сообщение
такой еще вариант до кучи )... /код не цитирую - отобразится криво/
А если except === max || except === min работать будет криво, а ещё ряд может быть сдвинут частично в отрицательный диапазон (int ведь). Хотя, я подозреваю, что топикстартера интересуют, на самом деле, числа типа uint, просто он несколько не разборчиво отнесся к выбору типа числа.

А мой способ ни когда не вернет max - косяк )
За то такой удобно использовать когда требуется исключить сразу ряд чисел-исключений:

Код AS3:
 
        function selectNm( min:uint, max:uint, exArr:Array ):uint
        {
            var res:uint = min + Math.random() * ( max + 1 - min );
 
            if (  exArr.indexOf( res ) !== - 1 ) res = selectNm( max, min, exArr );
 
            return res;
        }

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
fish_r, теоретически такой код может уйти в бесконечную рекурсию. Чем больше разброс, тем вероятность меньше.
И кстати, даже если отбросить рекурсию - считать будет не правильно.

Upd. Да, правильно считает, посмотрел не туда.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!


Последний раз редактировалось TanaTiX; 30.01.2012 в 06:35.
Старый 30.01.2012, 06:07
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 27  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Проверил, вродь правильно считает. Ну, да - не для сложных случаев, для простых задач, коих тоже хватает пойдет ).

Добавлено через 11 минут
Хотя ты прав - потенциальный косячок тут заложен, не стал бы его юзать.

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от fish_r Посмотреть сообщение
А если except === max || except === min работать будет криво, а ещё ряд может быть сдвинут частично в отрицательный диапазон ..
криво будет если исключение вне диапазона, а для краев и отрицательных нормально, или я чего-то упустил?
Код AS3:
public function Main():void
{
	trace(test(-3));// 0,1660,1706,1649,1651,1652,1682
	trace(test(0));// 1693,1650,1720,0,1611,1633,1693
	trace(test(3));// 1642,1608,1681,1662,1702,1705,0
}
 
private function test(exept:int):Array
{
	var res:Array = [0, 0, 0, 0, 0, 0, 0];
	var n:int = 1e4;
	for (var i:int = 0; i < n; i++) 
	{
		res[3 + random( -3, 3, exept)]++;
	}
	return res;
}
 
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));
	}
}

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от silin Посмотреть сообщение
криво будет если исключение вне диапазона, а для краев и отрицательных нормально, или я чего-то упустил?
Нет, извиняюсь, это я криво прочел.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Все равно, зачем 2 раза рандом вызывать?

Код AS3:
public function random(min:int, max:int, except:int):int
{
	var random:Number = Math.random();
 
	if (random < (except - min) / (max - min))
	{
		return min + int(random * (except - min));
	}
	else
	{
		return max - int(random * (max - except));
	}
}
ОК, вопрос снимается
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.01.2012 в 17:11.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
random

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

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


 


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


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