c++随机数及rand()的缺陷

c++生成随机整数和浮点数如下:

#include <random>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "随机数测试开始: " << endl;
    default_random_engine dre;
    uniform_int_distribution<int> di(10,20);
    for(int i=0;i<10;i++) {
        cout << di(dre) << " ";
    }
    cout << endl;

    uniform_real_distribution<double> dr(10,20);
    for(int i=0;i<10;i++) {
        cout << dr(dre) << " ";
    }
    cout << endl;

    vector<int> vs;
    vs.push_back(1);
    vs.push_back(2);
    vs.push_back(3);
    vs.push_back(4);
    vs.push_back(5);
    vs.push_back(6);
    vs.push_back(7);
    vs.push_back(8);
    vs.push_back(9);
    vs.push_back(0);
    shuffle(vs.begin(),vs.end(),dre);
    for(int i =0;i<vs.size();i++) {
        cout << vs[i] << " ";
    }
    cout << endl;
    cout << "随机数测试结束. " << endl;
}

输出如下:

随机数测试开始:
16 13 20 19 14 17 10 16 15 14
10.9754 15.4722 12.785 11.8838 15.4688 19.9288 19.5751 19.9646 19.6489 19.6769
0 3 2 9 5 1 6 7 4 8
随机数测试结束.

还可以使用标准C的rand,如下:

#include <cstdlib>
int main() {
    //srand(10);
    for(int i = 0; i < 10; i ++)
            cout << rand() << " "; //返回0~32767之间
    cout << endl;
}

输出如下:

41 18467 6334 26500 19169 15724 11478 29358 26962 24464

关于使用随机数引擎还是rand()函数的问题,在C++标准库第二版17.1.1看到如下说明:

时间: 2024-10-08 22:13:31

c++随机数及rand()的缺陷的相关文章

在C语言如何利用srand()和随机数函数rand()生成随机数

摘自:百度百科 在stdlib.h 中这两个函数的原型是: int rand(); void srand (unsigned int); ?在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关.为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子.函数 srand()可以为随机数生成器播散种子.只要种子不同rand()函数就会产生不同的随机数序列.srand

随机数:rand()

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include<stdlib.h> 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间.在调用此函数产生随机数前,必须先利用srand()设好随机数种子,

sql server 获取随机数函数RAND()和RAND(x)

--RAND(x)返回一个随机浮点值v,范围在0~1之间(即0<=v<=1.0) --若指定一个整数参数x,则它被用作种子值,使用相同的种子数将产生重复序列.如果同一种子值多次调用RAND函数,它将返回同一生成值 示例:select RAND(), RAND(), RAND(); 结果:0.664547768839536   0.0166045240927059   0.0892182701370623 --不带参数的RAND()每次产生的随即数值是不同的 select RAND(10), R

SQL中随机数函数rand()简介

转自:http://database.51cto.com/art/201009/224397.htm 下文将为您介绍SQL中的随机函数rand(),供您参考,如果您是才接触SQL Server的新手,不妨一看,相信对您学习SQL中的函数会大有帮助. 在SQL Server中,有个随机函数rand(),有不少新手可能不知道存在这个函数,现在我就把这个函数的一些随机数生成技巧写出来,这是面向菜鸟的,老鸟请不要拍砖呀,我的头还不够硬 不过还是希望老鸟们多多指教了,现在切入正题:  随机函数:rand(

【JAVA】产生随机数:rand.nextInt(int n )

参考链接: CSDN: rand.nextint() CSDN: jave中的Random中rand.nextInt(int n )的取值范围 CSDN: random.nextInt()与Math.random()基础用法 1. 代码示例 - `Random rand = new Random();` - `p += rand.nextInt(2); //取0-2(左闭右开不包括2)的整数` 2. rand.nextInt()的用法 背景: 自从JDK最初版本发布起,我们就可以使用java.u

PHP获取随机数的函数rand()和mt_rand()

rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数,如rand($min,$max),$min表示从XX开始取值,$max表示最大只能为XX 例如: <?php echo rand() . "\n";//得到一个不定位数的随机数 echo rand(5, 15);//在5~15之间取一个数 ?> mt_rand() 用法跟rand()类似,但是mt_rand()的执行效率更高,平常使用也推荐用mt_rand(). 博客原文:PHP获取随

mysql 随机数 rand使用

生成随机数 生成0-3的随机数 SELECT RAND() * 3 最大不会超过3, SELECT FLOOR(RAND() * 3) 上面生成整数的值是0,1,2,3生成的随机整数是1,2,3的话,语句如下 SELECT FLOOR(1 + RAND()*3) 原文地址:https://www.cnblogs.com/phpper/p/8638545.html

猜数字游戏及rand()函数

#include<stdio.h>#include<stdlib.h>int main() { short number; short guess=0; number=rand()%100; number++; printf("猜数字游戏\n"); printf("该数字在1到100之间\n"); while(guess!=number) { printf("请你输入所猜数字:"); scanf("%hd&quo

linux 获取随机数的办法

1.1.1 inux随机数的办法  http://www.2cto.com/kf/201410/342717.html 方法一.[[email protected] ~]# date +%N  %N纳秒  随机获取的九位数通过时间 823015723 通过时间获得随机数(date) date +%s%N #生成19位数字,1287764807051101270 date +%s%N | cut -c6-13 #取八位数字,21793709 date +%s%N | md5sum | head -