Нашел
еще один вариант:
Код 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);
}
}