js实现概率
生成随机数
JavaScript中可以通过Math.random()生成一个0到1之间的伪随机数,包含0但不包含1。这是实现概率计算的基础。
const randomValue = Math.random(); // 0 <= x < 1
基础概率判断
假设需要实现30%概率触发某个事件,可以直接比较随机数与阈值:
if (Math.random() < 0.3) {
console.log('30%概率触发');
}
多概率分支
当需要处理多个不同概率的事件时,可以采用累加概率区间的方式:
const random = Math.random();
if (random < 0.2) {
console.log('20%概率事件');
} else if (random < 0.5) { // 0.2-0.5 => 30%
console.log('30%概率事件');
} else { // 剩余50%
console.log('50%概率事件');
}
权重概率系统
对于需要按权重分配概率的场景,可以先将权重归一化:
const items = [
{ name: 'A', weight: 2 },
{ name: 'B', weight: 3 },
{ name: 'C', weight: 5 }
];
const totalWeight = items.reduce((sum, item) => sum + item.weight, 0);
let random = Math.random() * totalWeight;
for (const item of items) {
if (random < item.weight) {
console.log(`选中: ${item.name}`);
break;
}
random -= item.weight;
}
概率分布函数
如果需要特定概率分布(如正态分布),可以使用转换方法:
// Box-Muller变换生成正态分布随机数
function normalRandom(mean = 0, std = 1) {
let u = 0, v = 0;
while(u === 0) u = Math.random();
while(v === 0) v = Math.random();
return mean + std * Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
}
概率补丁验证
为确保概率准确性,可以通过大量测试验证:
let count = 0;
const trials = 1000000;
for (let i = 0; i < trials; i++) {
if (Math.random() < 0.3) count++;
}
console.log(`实际概率: ${(count / trials * 100).toFixed(2)}%`);






