C++随机数

C++随机数

C中的做法

  • 之前都是使用rand()函数进行无符号随机整数的生成,如果需要生成对应的范围或者浮点数,需要自己进行一些修改,unsigned随机数生成的方法如下所示。在使用中,为了使得每次运行的结果都不一样,我们将当前时间对应的无符号数作为初始化的种子。
  • code

    void randOld()
    {
        // 按照时间来初始化种子,保证每次结果不一样
        srand((int)time(0));
        for (int i = 0; i < 10; i++)
            cout << rand() << ", ";
        cout << endl;
    }
    

新标准的做法

  • 新标准中在头文件<random>中引入了许多分布类型,下面做一下简要介绍。
  • random_device:非确定性随机数生成设备,可以用于生成随机初始化的种子,保证每次的运行结果都不一样
  • default_random_engine:生成随机无符号数
  • uniform_int_distribution:生成某个范围内的均匀随机分布的数,模板类,包含提供参数的上下限。
  • uniform_real_distribution:均匀随机分布的实数分布生成器
  • normal_distribution:正态分布
  • 更多的可以参考:http://www.cplusplus.com/reference/random/
  • code

    void randNew()
    {
        random_device rd; // 非确定性随机数生成设备
        default_random_engine e1; // 使用默认的初始化种子
        default_random_engine e2(rd()); // 不确定的数作为初始化种子,每次运行结果都不一样
        for (int i = 0; i < 10; ++i)
            cout << e1() << " ";
        cout << endl;
    
        for (int i = 0; i < 10; ++i)
            cout << e2() << " ";
        cout << endl;
    
        // 整数范围
        uniform_int_distribution<> uid(-1, 1); // 包含上下限
        for (int i = 0; i < 10; i++)
            cout << uid(e2) << " ";
        cout << endl;
    
        // 实数范围
        uniform_real_distribution<> udouble(-1, 0);
        for (int i = 0; i < 10; i++)
            cout << udouble(e2) << " ";
        cout << endl;
    
        normal_distribution<> normal(0, 2);
        for (int i = 0; i < 10; i++)
            cout << normal(e2) << " ";
        cout << endl;
    
        lognormal_distribution<double> lognormal(0, 1);
        for (int i = 0; i < 10; i++)
            cout << lognormal(e2) << " ";
        cout << endl;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

littletomatodonkey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值