我设计的值适合偏心的钟形曲线。试运行似乎给出了理想的结果,但有什么我想念的吗?
我发现了一个被认为有帮助的问题,但他们正在使用标准偏差。
JavaScript Math.random Normal distribution (Gaussian bell curve)?
从上面的问题:
Math.random
已正常分发吗?const ranks = [
['X' , 0.01, 0.01],
['SSS' , 0.03, 0.04],
['SS' , 0.06, 0.10],
['S' , 0.08, 0.18],
['A' , 0.11, 0.29],
['B' , 0.14, 0.43],
['C' , 0.21, 0.64],
['D' , 0.17, 0.81],
['E' , 0.12, 0.93],
['F' , 0.07, 1.00]
];
log('Total:', ranks.reduce((a, b) => a + b[1], 0).toFixed(2));
for (let i = 0; i < 10; i++) {
generate();
}
/* Public */
function generate() {
let percent = Math.random();
log(percent.toFixed(4), getRank(percent));
}
/* Protected */
function getRank(percent) {
return ranks.filter((rank, index) => {
let min = index > 0 ? ranks[index - 1][2] : -1;
return percent > min && percent <= rank[2];
})[0][0];
}
/* Private */
function log() {
let el = document.createElement('DIV');
el.innerHTML = [].slice.call(arguments).join(' ');
el.className = 'log-line';
document.body.appendChild(el);
}
body {
background: #666;
}
.log-line {
font-family: monospace;
background: #AAA;
margin: 0.5em 0.25em;
padding: 0.25em;
}
.log-line::before {
content: '>>> ';
}
您可能缺少的是以下内容:
如果您使用加权随机选择的实施,则最后两个步骤并非绝对必要 -