Показать сообщение отдельно
Старый 30.01.2012, 19:43
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 5  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Тест на скорость и качество рандома, брались целые числа от 0 до 30 включительно, исключалось 5
Код AS3:
random1 ---------
0  =>  333440 0.0333
1  =>  332597 0.0333
2  =>  333305 0.0333
3  =>  332736 0.0333
4  =>  332711 0.0333
6  =>  334101 0.0334
7  =>  333831 0.0334
8  =>  332383 0.0332
9  =>  332962 0.0333
10  =>  332951 0.0333
11  =>  332498 0.0332
12  =>  333338 0.0333
13  =>  333087 0.0333
14  =>  333810 0.0334
15  =>  333477 0.0333
16  =>  333979 0.0334
17  =>  333544 0.0334
18  =>  333990 0.0334
19  =>  333006 0.0333
20  =>  334569 0.0335
21  =>  333063 0.0333
22  =>  332528 0.0333
23  =>  334435 0.0334
24  =>  332408 0.0332
25  =>  333202 0.0333
26  =>  333793 0.0334
27  =>  333052 0.0333
28  =>  334687 0.0335
29  =>  332766 0.0333
30  =>  333751 0.0334
max: 0.0335
min: 0.0332
time 5104
random2 ---------
0  =>  333387 0.0333
1  =>  333269 0.0333
2  =>  334142 0.0334
3  =>  332735 0.0333
4  =>  333304 0.0333
6  =>  334511 0.0335
7  =>  332390 0.0332
8  =>  333775 0.0334
9  =>  333638 0.0334
10  =>  334384 0.0334
11  =>  331774 0.0332
12  =>  333715 0.0334
13  =>  332765 0.0333
14  =>  333892 0.0334
15  =>  332855 0.0333
16  =>  333543 0.0334
17  =>  333384 0.0333
18  =>  333845 0.0334
19  =>  333176 0.0333
20  =>  333791 0.0334
21  =>  333333 0.0333
22  =>  333266 0.0333
23  =>  333152 0.0333
24  =>  333917 0.0334
25  =>  332545 0.0333
26  =>  332034 0.0332
27  =>  332994 0.0333
28  =>  333013 0.0333
29  =>  333907 0.0334
30  =>  333564 0.0334
max: 0.0335
min: 0.0332
time 4653
random3 ---------
0  =>  1667509 0.1668
6  =>  399696 0.04
7  =>  399660 0.04
8  =>  400894 0.0401
9  =>  399009 0.0399
10  =>  399507 0.04
11  =>  399832 0.04
12  =>  399777 0.04
13  =>  399750 0.04
14  =>  399956 0.04
15  =>  399588 0.04
16  =>  401202 0.0401
17  =>  399070 0.0399
18  =>  400281 0.04
19  =>  399702 0.04
20  =>  400266 0.04
21  =>  400008 0.04
22  =>  399781 0.04
23  =>  400112 0.04
24  =>  401127 0.0401
25  =>  399899 0.04
26  =>  333374 0.0333
max: 0.1668
min: 0.0333
time 4233
Код AS3:
function result(method:Function):void
{
	dic = new Dictionary();
	time = getTimer();
 
	for (i = 0; i < maxit; i++)
	{
		n = method(0,30,5);
		dic[n] ||=  0;
		dic[n]++;
	}
 
	var max:Number = 0;
	var min:Number = 30;
	var k:Number = 0;
 
	for (key in dic)
	{
		k = Math.round(dic[key] / maxit * 10000) / 10000;
		max = Math.max(max,k);
		min = Math.min(min,k);
		trace(key, " => ", dic[key], k);
	}
 
	trace("max:", max);
	trace("min:", min);
	trace("time", getTimer() - time);
}
 
var dic:Dictionary;
var i:int;
var n:int;
var key:String;
var time:uint;
var maxit:int = 10000000;
 
function random1(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));
	}
}
 
trace("random1 ---------");
result(random1);
 
 
function random2(min:int, max:int, except:int):Number
{
	max++;
	var rand:Number = min + int(Math.random() * (max - min - 1));
	return int(rand + Number(rand >= except));
}
 
trace("random2 ---------");
result(random2);
 
function random3(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));
	}
}
 
trace("random3 ---------");
result(random3);