我设计的值适合偏心的钟形曲线。试运行似乎能得到令人满意的结果,但是我有什么想念的?
我发现了一个思想可以解决的问题,但是他们使用的是标准差。
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: '>>> ';
}
答案 0 :(得分:0)
您可能缺少的是以下内容:
如果您使用加权随机选择的实现方式,那么最后两个步骤不是绝对必要的,