关于windows下c/c++的rand()的一个测试
2016-07-21 20:48
302 查看
int xs[]={-1,0,1,0}; int ys[]={0,-1,0,1}; int x=0,y=0; for(int t=0;t<1<<18;t++){ int d=rand()%4; x+=xs[d];y+=ys[d]; 在(x,y)绘制一个点; }
根据rand()%4的值决定点的移动方向,生成图像如下,可以发现无论srand()设置的种子是什么,周期都为218 即262144
生成的图形形状方向也完全一样,但起点由于随机种子不同在图中的位置不同
rand()%8的周期为219
rand()%2n 周期为 2n+16 (0<n<=15)
rand()%3及模其它非2次幂的数则有较长的循环周期
rand()所生成的伪随机数有其非随机的对称性和循环性,可能会影响某些需要真随机数满足期望的算法的复杂度或正确率,但一般较难观察到rand()的规律性对很多随机化算法的影响
相关文章推荐
- c语言实现字符串的分割
- c++ learning note
- 嵌入式系统上C++调用C语言接口代码链接时找不到C函数问题处理
- 1003. 我要通过!(20)
- C/C++笔记--程序内存分区分析
- Leetcode 190. Reverse Bits (Easy) (cpp)
- 2016ACM多校训练第一场_1001_Abandoned Country 并查集+DFS
- PAT乙级1002. 写出这个数 C++
- C语言位操作
- C++STL之所有算法介绍
- C语言内存话题
- C语言程序设计练习2(窗口服务指示系统3.5 )
- C++ hdoj 2013
- 浅谈C语言中结构体的初始化
- Remove Duplicates from Sorted Array II
- 宏的使用
- Word Search
- 可变参数列表
- C++ Learning (2)
- 关于C变量作用域和生存期的常见问题