文档章节

js 控制随机数生成概率

o
 osc_y8yehimr
发布于 2019/03/20 15:09
字数 306
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围。

 

'use strict';

class GL {
    /**
     * 构造函数
     * @param {object} opt
     * @param {number} opt.min 最小整数值
     * @param {number} opt.max 最大整数值
     * @param {Map} opt.fenpei 自定义概率 
     */
    constructor({ min, max, fenpei = new Map() }) {
        this.min = min;
        this.max = max;
        this.fenpei = fenpei;
    }

    /**
     * 可分配百分比
     */
    get baifenbi() {
        return (1 - this.peizhi) / (this.max - this.min - this.fenpei.size);
    }

    /**
     * 匹配百分比
     */
    get peizhi() {
        let result = 0;
        for (let i of this.fenpei.values()) {
            if (0 < i && i < 1) result += i;
        }
        return result;
    }


    /**
     * 随机数
     * @returns {number} [min,max)
     */
    random() {
        let t = 0, r = Math.random();
        for (let i = this.min; i < this.max; i++) {
            this.fenpei.has(i) ? t += this.fenpei.get(i) : t += this.baifenbi;
            if (t > r) return i;
        }
        return null;
    }
}

  export default GL;
//module.exports = GL;

 

 

// 引用gl

import GL from './src/index.js';
//const GL = require('./src');

// 随机生成 1 ~ 8 之间的数(不包含8) 
let gl = new GL({
    min: 1,
    max: 8,
    fenpei: new Map([
        [1, 0.1],   // 1 生成概率为 10%
        [2, 0.5],   // 2 生成概率为 50%
        [5, 0.2],   // 5 生成概率为 20%
    ])
});

{
    // 循环10000次看下概率分配情况
    let map = {};
    for (let i = 0; i < 10000; i++) {
        let num = gl.random();
        typeof map[num] !=='undefined' ? map[num] += 1 : map[num] = 0 ;
    }

    for (let key in map) {
        console.log(`${key} = ${map[key] / 10000}`);
    }
}

 

百度网盘:

链接:https://pan.baidu.com/s/1Q8Ww3siWq9xHQ5KPPz_azQ
提取码:oyzr
复制这段内容后打开百度网盘手机App,操作更方便哦

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Spark Summit North America 202006 高清 PPT 下载

为期五天的 Spark Summit North America 2020在美国时间 2020-06-22 ~ 06-26 举行。由于今年新冠肺炎的影响,本次会议第一次以线上的形式进行。这次会议虽然是五天,但是前两天是培训,后面三...

osc_z9t307rr
20分钟前
14
0
矩阵计算与AI革命:可将计算性能提高150倍的异构计算

本文翻译自Wikibon矩阵计算与AI革命系列研究文章。 如今异构计算(Heterogeneous Compute,HC)已经部署在消费类移动设备中,与传统架构相比可以将矩阵工作负载的性能提高50倍。同时,这也将...

osc_ml6lx2h4
21分钟前
23
0
smart 后台 使用说明

乐观锁 说明 如果想实现如下需求: 当要更新一条记录的时候,希望这条记录没有被别人更新,确保当前只有一个人在操作。 乐观锁的实现原理: 取出记录时,获取当前 version 2 更新时,带上这个 ...

奔跑的android
21分钟前
3
0
关于win10的hype-v与VMWARE启动冲突的解决方法

升级win10后,在卸载hype-v重启电脑后仍然报错,解决的办法是只需要直接使用管理员身份打命令提示符,然后执行以下命令即可: bcdedit /set hypervisorlaunchtype off...

osc_l7zl78wt
23分钟前
16
0
操作系统设计中的加电引导

作者:丁宋涛 系统启动过程概述 在掀下电脑开机按钮后,电源就会开始向主板和其他外围设备供电。初始状态下的电压还不太稳定,因此并不会立即开始指令的执行。此时,主板上的控制芯片组会发出重...

osc_kz2s8mnr
24分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部