wvxvw, а зачем ты через целочисленные значения пытаешься вычислить Пи?
Почему не напрямую использовать Math.random() вместо шума [0..255]?
Добавлено через 1 час 18 минут

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
public class Main extends Sprite
{
public function Main():void
{
this.computePI( 1E+06, 1E+07 );
}
///
private var _txtLog : TextField;
///
public function computePI( radius:Number, iterations:Number=10 ) : void
{
var radiusPow2:Number = radius * radius;
var hits:Number = 0;
var i:Number = -1;
while (++i < iterations)
{
var rndX:Number = 2.0 * radius * (0.5 - Math.random());
var rndY:Number = 2.0 * radius * (0.5 - Math.random());
if (rndX * rndX + rndY * rndY <= radiusPow2)
hits += 1.0;
}
var rectS:Number = 4.0 * radiusPow2;
var circS:Number = rectS * hits / iterations;
var PI:Number = circS / radiusPow2;
this.addLog("PI: " + PI);
this.addLog("rectS: " + rectS);
this.addLog("circS: " + circS);
this.addLog("iterations: " + iterations);
this.addLog("hits: " + hits);
}
///
public function addLog( msg:String ) : void
{
if (!this._txtLog)
{
this._txtLog = new TextField();
this._txtLog.x = 10.0;
this._txtLog.y = 10.0;
this._txtLog.width = 400.0;
this._txtLog.height = 300.0;
this.addChild( this._txtLog );
}
this._txtLog.appendText( msg + "\n" );
}
}
}
Цитата:
PI: 3.1416376
rectS: 4000000000000
circS: 3141637600000
iterations: 10000000
hits: 7854094
|
как вариант