神奇的随机数rand()

随机数在统计理论中占有很重要的地位,很多应用都需要用到他,系统自带的rand()函数产生的是伪随机数,所以该如何真正的随机数呢?

1、c语言中的时间函数

关于c语言我查到的两个比较好的博文是:http://blog.sina.com.cn/s/blog_686d0fb001012o3x.html

http://blog.csdn.net/wangluojisuan/article/details/7045592/

里面写的很是详细,但是我想通过一个例子来说明感觉比较好。常用的也就这几个。

    char a[100];
    time_t now;
    time(&now);   //或者 now = time(NULL);
    printf("%s",ctime(&now));//准确的获取电脑时间:Sun Apr 23 13:16:53 2017  
time();这个函数其实保存的是一个历史时间,所以需要用NULL把这个历史时间清空一下,time()就会自动保存当前时间了。你可以简单的理解为NULL就是给time()初始化。然后利用ctime()函数输出固定格式的时间字符串。

2、随机数

c语言自带是随机数是能够产生随机数,但是你每次调用后产生的随机数都是一样的一套随机数。这样就不行了。就像这样:
int i;for(i = 0;i<5;i++){    printf("%d\t",rand());}
你只要使用上面这个程序,就会得到下面这样的随机数:41,18467,6334,26500,19169,没有例外。为了解决这个问题,时间函数就来了,时间能揭开一切虚假的东西。

只要在程序的开头加上 srand(time(NULL));
srand函数是随机数发生器的初始化函数。这句话就是把当前时间当成随机数种子。
这样,随机数的种子就被赋值成当前time函数运行的时候的系统时间了,保证了随机性。还有一个经典的例子:
 1 //产生100个0-1之间的随机数
 2 srand(time(NULL));//产生时间种子
 3 int i,rand_int ;
 4 float rand_float;
 5 for(i = 0;i<100;i++)
 6 {
 7     rand_int = rand();//产生随机数
 8     rand_float = (float)rand_int/RAND_MAX;
 9     printf("%5.3f\t",rand_float);
10 }

				
时间: 2025-01-09 09:58:17

神奇的随机数rand()的相关文章

【编程开发】C语言中随机数rand使用注意事项

[编程开发]C语言中随机数rand使用注意事项 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语言中的rand函数为例,使用时需要注意随机数的随机体现在哪里,比如是程序在不同的时刻执行时,相同位置的随机数是否需要一样,还是要每次执行生成的随机数也要不一样,等等,这些都是需要加以关注的地方. 经测试,发现,在不使用srand这个随机数种子的情况下:每次运行生成的随机数都是一样的.有的时候是需要这样子的,当然可以直接使

C/C++随机数rand()和种子函数srand()

在计算机编程中,常常要产生一个随机数.但是要让计算机产生一个随机数并不那么容易.计算机的执行,是以代码来进行的,所以并不可能像抽牌,扔骰子那样产生一个真正具有随机意义的数.只可能以一定的算法产生一个伪随机数,C/C++提供了一个函数,放在cstdlib中,叫做rand(),原型为:int rand(void);. 显然,这个函数不接受任何参数,它的作用是:产生一个[0..RAND_MAX]之间的随机数.RAND_MAX也存放在cstdlib中,是一个宏常量: #define RAND_MAX O

C++随机数rand(), srand()

c++产生随机数会用到rand(), srand()函数,下面总结两个函数特性和使用. 1. rand() #include <iostream> #include <cstdlib> using namespace std; int main() { int m; for(int i = 1; i <= 5; i++) { m = rand(); cout << "m = " << m << endl; } retur

C/C++中产生随机数(rand,srand用法)

计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了.) 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,

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

[转]C++/C中产生随机数(rand,srand用法)

参考原文地址:https://www.cnblogs.com/afarmer/archive/2011/05/01/2033715.html 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生的每个小序列都有一个初始值,即随机种子(即根据某一个初始值代入某个公式产生一系列值),注意:小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后,它们又会重复出现. 我们知道rand()函数可以用来产生随机数,但这不是真正意义上

rand随机数生成函数

#include<iostream> #include<cstdlib> #include<algorithm> #include<ctime> #include<vector> using namespace std; /*第一个函数是vector的引用,不用每次复制:而第二个函数每次都要对vector复制,第一个更优*/ void fill_random_int(vector<int> &v,int cnt) { v.cl

随机数发生器

浅谈随机数发生器 目录(?)[-] 一真随机数发生器 基于电路的TRNG 基于其他物理源的TRNG 其他物理信息TRNG 二伪随机数发生器 取中法 i平方取中法 ii常数取中法 iii乘法取中法 同余法 移位法 梅森旋转算法 今 天在微博上到一篇如何使用随机数的文章,让我回忆起刚上大一时学C语言时,书后有道调用rand()函数的练习题,当时觉得好神奇,想知道它是怎么实现 的,大二时候学Java又遇到了random()函数,恰巧当时上机课我有机会问老师,遗憾的是老师只是告诉我那是伪随机数,课后查查

学C第4天上(溢出、随机数)

一.溢出 1.short类型 数据使用必须在范围内,否则无符号产生溢出,有符号出错. 1      print("short极大值%d","short极小值",SHRT_MAX,SHRT_MIN);//32767,-32767  2      print("unsigned short极大值%d","unsigned short极小值",USHRT_MAX,0);//65535,0  3   4      unsigned s