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

Регистрация: Mar 2007
Сообщений: 319
Нашел еще один вариант:
Код AS3:
private static var seed1:int = getTimer();
public static function random1 ():Number
{
	seed1 = (seed1 * 214013 + 2531011) % 0x7fffffff;
	return seed1 / 0x7fffffff;
}
И еще один из недр tamarin-central перевел на AS3, он должен быть идентичен флешовому, но выглядит страшно:
Код AS3:
private static var seed:uint = getTimer();
public static function random3 ():Number
{
	var aNum:uint = (seed = ((seed & 1) ? ((seed >> 1) ^ 0x48000000) : (seed >> 1))) * 71;
	aNum = ((aNum << 13) ^ aNum) - (aNum >> 21);
	var iResult:uint = (aNum * int(aNum * aNum * 15731 + 789221) + 1376312589) & 0x7fffffff;
	iResult += aNum;
	iResult = ((iResult << 13) ^ iResult) - (iResult >> 21);
	return (iResult & 0x7fffffff) / (0x7fffffff + 1.0);
}
Test:
Код AS3:
	[SWF(width = "400", height = "500")]
	public class Test2 extends Sprite
	{
		private var text:TextField;
 
		public function Test2 ()
		{
			super();
 
			text = new TextField();
			text.y = 400;
			text.height = 100;
			addChild(text);
 
			test1();
			test2();
			test3();
			test4();
		}
 
		private static var seed1:int  = getTimer();
		public static function random1 ():Number
		{
			seed1 = (seed1 * 214013 + 2531011) % 0x7fffffff;
			return seed1 / 0x7fffffff;
		}
 
		private function test1 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random1() * 200, random1() * 200, random1() * 0xffffff);
			}
			text.appendText("test1 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 0;
			addChild(bitmap);
		}
 
		private static var seed2:int  = getTimer();
		public static function random2 ():Number
		{
			seed2 = (seed2 * 16807) % 0x7fffffff;
			return seed2 / 0x7fffffff;
		}
 
		private function test2 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random2() * 200, random2() * 200, random2() * 0xffffff);
			}
			text.appendText("test2 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 200;
			bitmap.y = 0;
			addChild(bitmap);
		}
 
		private static var seed3:uint = getTimer();
		public static function random3 ():Number
		{
			var aNum:uint = (seed3 = ((seed3 & 1) ? ((seed3 >> 1) ^ 0x48000000) : (seed3 >> 1))) * 71;
			aNum = ((aNum << 13) ^ aNum) - (aNum >> 21);
			var iResult:uint = (aNum * int(aNum * aNum * 15731 + 789221) + 1376312589) & 0x7fffffff;
			iResult += aNum;
			iResult = ((iResult << 13) ^ iResult) - (iResult >> 21);
			return (iResult & 0x7fffffff) / (0x7fffffff + 1.0);
		}
 
		private function test3 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(random3() * 200, random3() * 200, random3() * 0xffffff);
			}
			text.appendText("test3 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 0;
			bitmap.y = 200;
			addChild(bitmap);
		}
 
		private function test4 ():void
		{
			var bitmapData:BitmapData = new BitmapData(200, 200, false, 0xffffff);
			var time:int              = getTimer();
			for (var i:int = 0; i < 100000; i++)
			{
				bitmapData.setPixel(Math.random() * 200, Math.random() * 200, Math.random() * 0xffffff);
			}
			text.appendText("test4 " + (getTimer() - time) + "\n");
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = 200;
			bitmap.y = 200;
			addChild(bitmap);
		}
	}
Изображения