产生随机数————srand函数与rand函数的使用
2016-08-22 18:02
751 查看
srand 初始随机数发生器
rand 随机数发生器
注意
在C++中,当srand中的参数相同(即随机数种子相同)时,则产生的伪随机数列也相同
关系:
srand函数用于为rand函数产生随机数种子
使用:
通常用time(NULL)作为srand函数的传入参数;
当使用time(NULL)作为srand函数的传入参数时,rand函数则以时间作为随机数种子进而产生随机数
技巧 1:
若要产生指定范围内的随机整数例如 [a, b) 则可以使用: a + rand() % (b - a) 表达式,也即为要产生 [a, b)范围内的随机整数,可以使用 a + rand() % n 表达式,其中 a 为起始值, n 为随机整数取值范围的大小即为 b - a
技巧 1 解释:
使用 rand() % n 产生的是 [0, n)之间的随机整数,则在此基础上进行改进,加上一个起始值 a 则产生随机整数的范围变为 [a, n + a),那么要产生[a, b)内的随机整数,则只需要将n变为 b - a
技巧 2 :
如要产生随机小数,直接将产生的随机整数除以相应次数的10,例:若产生3位的随机小数,则先产生随机整数,然后除以1000即可
细节分析:
计算机运行效率对随机数产生的影响:
代码一:
上面代码运行效果:只用时间初始化随机数种子一次,从而随机产生100个不同的数字
代码二:
上面代码运行效果:每次用时间初始化随机数种子,但是产生的这100个数字是相同的
分析:由于现在的计算机运行效率非常高,使得for循环(循环次数非常少时)中的时间保持不变(即for循环中的time(NULL)不变),所以代码二的方式在for循环里使用srand函数指定随机数种子,则每次循环随机数种子都相同(因time(NULL)都相同)来初始化伪随机数列,则每次的伪随机数列都相同,同时rand都只产生伪随机数列中的第一个数字,那么每次由rand产生的数字都相同,而用代码一则只初始化一次随机数种子,则之后rand函数每次产生的数字都从伪随机数列中依次产生,从而能够产生不同的数字。
rand 随机数发生器
注意
在C++中,当srand中的参数相同(即随机数种子相同)时,则产生的伪随机数列也相同
关系:
srand函数用于为rand函数产生随机数种子
使用:
通常用time(NULL)作为srand函数的传入参数;
当使用time(NULL)作为srand函数的传入参数时,rand函数则以时间作为随机数种子进而产生随机数
技巧 1:
若要产生指定范围内的随机整数例如 [a, b) 则可以使用: a + rand() % (b - a) 表达式,也即为要产生 [a, b)范围内的随机整数,可以使用 a + rand() % n 表达式,其中 a 为起始值, n 为随机整数取值范围的大小即为 b - a
技巧 1 解释:
使用 rand() % n 产生的是 [0, n)之间的随机整数,则在此基础上进行改进,加上一个起始值 a 则产生随机整数的范围变为 [a, n + a),那么要产生[a, b)内的随机整数,则只需要将n变为 b - a
技巧 2 :
如要产生随机小数,直接将产生的随机整数除以相应次数的10,例:若产生3位的随机小数,则先产生随机整数,然后除以1000即可
细节分析:
计算机运行效率对随机数产生的影响:
代码一:
#include <iostream> #include <time.h> #include <stdlib.h> using namespace std; int main() { srand(time(NULL)); for (int i = 0; i < 100; i++) { cout << rand() % 100 << endl; } return 0; }
上面代码运行效果:只用时间初始化随机数种子一次,从而随机产生100个不同的数字
代码二:
#include <iostream> #include <time.h> #include <stdlib.h> using namespace std; int main() { for (int i = 0; i < 100; i++) { srand(time(NULL)); cout << rand() % 100 << endl; } return 0; }
上面代码运行效果:每次用时间初始化随机数种子,但是产生的这100个数字是相同的
分析:由于现在的计算机运行效率非常高,使得for循环(循环次数非常少时)中的时间保持不变(即for循环中的time(NULL)不变),所以代码二的方式在for循环里使用srand函数指定随机数种子,则每次循环随机数种子都相同(因time(NULL)都相同)来初始化伪随机数列,则每次的伪随机数列都相同,同时rand都只产生伪随机数列中的第一个数字,那么每次由rand产生的数字都相同,而用代码一则只初始化一次随机数种子,则之后rand函数每次产生的数字都从伪随机数列中依次产生,从而能够产生不同的数字。
相关文章推荐
- C++中srand函数与rand函数产生一定范围内的随机数
- rand函数和srand函数:产生随机数
- C语言如何产生一个随机数,rand函数的使用
- srand函数和rand函数产生随机数代码示例
- rand函数和srand函数:产生随机数-ZT
- rand函数和srand函数的用法和区别+产生指定区间的随机数如何生成
- rand函数和srand函数:产生随机数
- 使用C语言产生正太分布的随机数之四
- 设计一个类,该类中有一个方法,该方法使用Random类随机产生10个三位数字(如636)的随机数,并把产生的10个随机数存入数组中。然后在另一个类中输出这10个数
- 使用Random产生100个无重复随机数,使用Set存储和使用位图存储的效率对比
- AWK使用总结(3)AWK产生随机数
- 使用C语言产生正太分布的随机数之问答篇
- 使用C语言产生任意分布的随机数
- 数组------写一个程序,产生25个随机数,对每个随机值,使用if-else 分类为大于、小于、等于
- MFC使用多线程时请谨慎使用srand()来产生随机数 .
- 产生随机数 rand() 和 srand() 函数的使用
- 使用T-SQL的Rand函数生成随机数的艰苦历程
- dos下使用汇编产生一个随机数方法
- java 使用hashset产生不重复的随机数
- 关于产生随机数,使用同一个Random()和不同Random()的区别。