在 2012年5月18日 下午9:47,Giant Y <y560...@gmail.com> 写道:
> 我需要一个产生随机数的函数,随机数的范围是[0,1]。于是我写了如下代码:
>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <time.h>
>> double random();
>> int main()
>> {
>> int i;
>> for( i = 0; i < 10; ++i )
>> {
>> printf( "value:%.4f \n", random() );
>> }
>> return 0;
>> }
>> double random()
>> {
>> double value;
>> srand( (unsigned)time(NULL) );
>> value = rand()/32767.0;
>> return value;
>> }
>
>
> 结果很让我抓狂!请看:
>
>> D:\Public\temp\c_test>test
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> value:0.7725
>> D:\Public\temp\c_test>test
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> value:0.7729
>> D:\Public\temp\c_test>test
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>> value:0.7740
>
>
> 很明显,函数time(NULL)的返回值在连续产生随机数的过程中,显然来不及改变。请教应该如何做,才能连续产生看上去像真的随机的数字?
>
> PS:
> 我目前在研究优化算法,需要产生一个随机矩阵才能进行后续的计算。师兄在MATLAB中已经实现了算法的程序代码。虽然在MATLAB中产生一个随机矩阵很简单,但我想用C语言实现相同的效果。
> 一下是在MATLAB中产生的一个随机矩阵:
>
>>> x = rand(5,10)
>
> x =
>
> 0.4229 0.6999 0.5309 0.9686 0.7788 0.2810 0.5181
> 0.6761 0.2548 0.7805
> 0.0942 0.6385 0.6544 0.5313 0.4235 0.4401 0.9436
> 0.2891 0.2240 0.6753
> 0.5985 0.0336 0.4076 0.3251 0.0908 0.5271 0.6377
> 0.6718 0.6678 0.0067
> 0.4709 0.0688 0.8200 0.1056 0.2665 0.4574 0.9577
> 0.6951 0.8444 0.6022
> 0.6959 0.3196 0.7184 0.6110 0.1537 0.8754 0.2407
> 0.0680 0.3445 0.3868
>
>
>
> -> posted by Giant Y
>
换成Linux然后读/dev/random
以后windows下的问题最好别拿来浪费大家的时间。
--
twitter:@zybest
新浪微博:@爱子悦
在openshift上搭建wordpress:http://blog-mking.rhcloud.com/