JavaScript Casuale con distribuzione gaussiana


Esempio

La funzione Math.random() dovrebbe dare numeri casuali che hanno una deviazione standard che si avvicina a 0. Quando si sceglie da un mazzo di carte, o si simula un tiro di dadi, questo è ciò che vogliamo.

Ma nella maggior parte delle situazioni questo non è realistico. Nel mondo reale la casualità tende a riunirsi intorno a un valore normale comune. Se tracciati su un grafico, ottieni la classica curva a campana o la distribuzione gaussiana.

Per fare ciò con la funzione Math.random() è relativamente semplice.

var randNum = (Math.random() + Math.random()) / 2; 
var randNum = (Math.random() + Math.random() + Math.random()) / 3; 
var randNum = (Math.random() + Math.random() + Math.random() + Math.random()) / 4; 

L'aggiunta di un valore casuale all'ultimo aumenta la varianza dei numeri casuali. Dividendo per il numero di volte che aggiungi si normalizza il risultato in un intervallo di 0-1

Poiché aggiungere più di un random è disordinato, una semplice funzione ti consentirà di selezionare una varianza che desideri.

// v is the number of times random is summed and should be over >= 1
// return a random number between 0-1 exclusive
function randomG(v){ 
    var r = 0;
    for(var i = v; i > 0; i --){
        r += Math.random();
    }
    return r / v;
}

Progressione della precisione della distribuzione della curva a campana con valori crescenti di v.

L'immagine mostra la distribuzione di valori casuali per diversi valori di v. La parte in alto a sinistra è la singola standard chiamata Math.random() basso a destra è Math.random() sommata 8 volte. Si tratta di 5.000.000 di campioni che utilizzano Chrome

Questo metodo è più efficiente in v<5