Skip navigation

JavaScript véletlenszám generálás

Egyenletes eloszlású véletlenszám

Math.random()

A JavaScript nyelvben a Math matematikai objektum biztosít lehetőséget véletlenszám generálásra a random() függvényével. Ez egy [0, 1) intervallumbeli lebegőpontos számot ad eredményül. Az eredményt felhasználhatjuk más intervallumbeli számok előállítására szorzással/osztással és összeadással/kivonással. Egész értékek a Math.floor() függvénnyel kapunk.

Használati példák

Egész értékű véletlenszám a [low, high] intervallumból, a határokat is beleértve:

var rnd = low + Math.floor( Math.random() * ( high - low + 1 ) );

Lebegőpontos értékkel:

var rnd = low + Math.random() * ( high - low );

[-range / 2, range / 2] intervallumból:

var rnd = range * ( 0.5 - Math.random() );

Dokumentáció

Normál eloszlású véletlenszám

Megadható a várható érték és a szórás. A véletlenszámok a várható érték körül fognak "sűrűsödni". Számos implementáció elérhető a weben, többféle programozási nyelvhez.

Marsaglia módszer

Forrása: StackOverflow hozzászólás.

function gaussian( mean, stdev ) {
    var y2;
    var use_last = false;
    return function() {
        var y1;
        if(use_last) {
           y1 = y2;
           use_last = false;
        }
        else {
            var x1, x2, w;
            do {
                 x1 = 2.0 * Math.random() - 1.0;
                 x2 = 2.0 * Math.random() - 1.0;
                 w  = x1 * x1 + x2 * x2;               
            } while( w >= 1.0);
            w = Math.sqrt((-2.0 * Math.log(w))/w);
            y1 = x1 * w;
            y2 = x2 * w;
            use_last = true;
       }

       var retval = mean + stdev * y1;
       if(retval > 0) 
           return retval;
       return -retval;
   }
}

// make a standard gaussian variable.     
var standard = gaussian(100, 15);

// make a bunch of standard variates
for( i = 0; i < 2000; i++ ) {
    console.log(standard());
}