怎样让c语言中的随机函数真正随机一般就是采用设置种子的方式 实现真随机
种子往往是由当前时间
比如
srand(time(NULL));
计算机语言中,很难做到真正的随机 。
c语言为什么弄了随机函数但是运行什么都没有不是真正的“随机” 。c语言弄了随机函数但是运行什么都没有是因为不是真正的“随机”,在没有别的操作下,每次执行同一个程序,调用rand得到的随机数序列是固定的(不是真正的“随机”) 。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发 。
C语言随机函数rand
和random都是伪随机函数 , 一般直接读取时间来做种子(sand(time))的也是不怎能随机的
我给你一个我以前写的,真正的随机:
int
myrand(void)
{
int
seed
;
asm
("rdtsc"
:
"=A"
(seed))
;
srand((unsigned
int)seed);
return
rand();
}
c语言随机函数怎么用,怎么定义?随机函数就是产生数的函数,c语言里有rand(),srand()等函数 。
用法
#include
#include
#include
void main( void )
{
int i,k;
srand( (unsigned)time( NULL ) ); //用系统时间当种子,对随机函数进行初始化
for( i = 0; i10;i)
【c语言随机函数不够随机 c语言随机函数srand】 {
k=rand()0; //产生各个随机数
printf( " k=%d/n", k );
}
}
详述
rand() srand() 头文件为#include
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关 。
rand()函数没有输入参数,直接通过表达式rand()来引用,rand()%n是产生的随机数对n取余,起到了取0到n-1之间随机数的作用;
例如可以用下面的语句来打印两个随机数: printf("Random numbers are: %i %i/n",rand(),rand());
因为rand()函数是按指定的顺序来产生整数,而未指定运行的种子,所以rand()每次使用的都是同一个种子来产生随机数序列,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是正真意义上的随机 。
为了时程序在每次执行时都能生成一个新序列的随机值 , 我们通常通过为随机数生成器提供一粒新的随机种子 。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子 。只要种子不同rand()函数就会产生不同的随机数序列 。srand()称为随机数生成器的初始化器 。
srand( (unsigned)time( NULL ) ); 用系统时间当种子,对随机函数进行初始化,每次的系统时间不同,所以种子也就不同 , 产生的随机数序列也就不同 。
关于C语言随机函数把
srand(
time(0)
);
放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了?
因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要一个种子 。
你把
srand(time(0))
放到循环前面就可以了 。
原因:
time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到!
也就是说 , srand(time(0))
连着4次的种子是一样的,种子一样,生产的随机数当然是一样了 。
如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand
就不一样了.但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性 。
另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的 。
c语言随机函数不够随机的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言随机函数srand、c语言随机函数不够随机的信息别忘了在本站进行查找喔 。
推荐阅读
- 装在u盘的系统怎么安装系统,装在u盘的系统怎么安装系统文件
- 安卓机刷ios系统吗,安卓手机刷苹果系统
- 用什么拍摄vlog好,拍vlog用什么设备轻便
- ios如何用蜂窝下载超200m,怎么用蜂窝网络下载150m的应用
- java模板引擎生成代码 java模板引擎性能对比
- win7导出pg数据库,pg数据库导入导出
- 人才网如何推广,人才网如何赚钱
- B站手游直播说明,bilibili手游直播
- java代码简笔画小人 java图案代码