Weighted Random Numbers

by Ben Gillbanks

JavaScript

// https://stackoverflow.com/a/4421297/1904139
function weightedRandomCurve(range1, range2, power = 2) {

	let min = Math.min(range1, range2);
    let max = Math.max(range1, range2);

	return Math.floor( min + ( max - min ) * Math.pow( Math.random(), power ) );

//	return Math.round(max / (Math.random() * max + min));

}

// https://gamedev.stackexchange.com/a/116837
function weightedRandomLinear(range1, range2) {

	let min = Math.min(range1, range2);
    let max = Math.max(range1, range2);

	return Math.floor( Math.abs( Math.random() - Math.random() ) * ( 1 + max - min ) + min );

}

let results = [];
for(i=0;i<9999;i++) {
    let num = weightedRandomCurve( 0, 5, 20 );
//    let num = weightedRandomLinear( 0, 5 );
//    console.log(num);
    if ( ! results[num] ) {
        results[num]=1;
    } else {
        results[num] ++;
    }
}
console.table(results);