C rand()与time()问题的种子设定

C rand()与time()问题的种子设定,c,time,random,C,Time,Random,我很难弄清楚如何使用rand()并使用Xcode将其与time()一起植入。我想生成0到1之间的随机十进制数 代码给出了元素1和2的随机数,但是元素0总是在0.077左右。你知道为什么会这样吗 我的代码是: #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { double array[3]; double rand_max = RAND_MAX; srand(

我很难弄清楚如何使用rand()并使用Xcode将其与time()一起植入。我想生成0到1之间的随机十进制数

代码给出了元素1和2的随机数,但是元素0总是在0.077左右。你知道为什么会这样吗

我的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
double array[3];

double rand_max = RAND_MAX;

srand((int)time(NULL));

for (int iii = 0; iii < 3; iii++)
    array[iii] = rand() / rand_max;

for (int iii = 0; iii < 3; iii++)
    printf("Element %d is: %lf.\n", iii, array[iii]);

return(0);
}

尝试将随机生成器随机化,而不将其强制转换为in

/* initialize random seed: */
srand ( time(NULL) );

霍莉·莫莉。。。这个不容易。我记得很久以前,在我的随机模型中,我遇到了这个问题。据我记忆所及,解决方法是使用一些pragma指令

无论如何,下面是解决方案,它是有效的。每次都是随机数。。。不过有点俗气

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    double array[10];

    double rand_max = RAND_MAX;

    srand(time(NULL));

    for (int iii = 0; iii < 9; iii++){
        rand();
        array[iii] = rand() / rand_max;
    }

    for (int iii = 0; iii < 9; iii++){
        printf("Element %d is: %lf.\n", iii, array[iii]);
    }


    return(0);
}
#包括
#包括
#包括
内部主(空)
{
双数组[10];
双随机最大值=随机最大值;
srand(时间(空));
对于(int iii=0;iii<9;iii++){
兰德();
数组[iii]=rand()/rand_max;
}
对于(int iii=0;iii<9;iii++){
printf(“元素%d是:%lf.\n”,iii,数组[iii]);
}
返回(0);
}
rand()通常是一个线性同余生成器。我想是的。time()也不是一个很好的种子,因为在很短的时间内,只有最底层的几位会发生显著的变化


random()更好一点。也可以考虑使用SRANDVEDE()或SRANDIVE DEVE(.P/> < P>典型的代码> RAND 实现不太好。您可以扔掉最初的几个结果,也可以切换到更好的伪随机数生成器。另请参见:在comp.lang.c常见问题解答中。

Hmm,它现在对元素0始终给出0.086,但对后两个元素仍然是随机的。哦,你真聪明。只需跳过第一个值=]。非常感谢!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    double array[10];

    double rand_max = RAND_MAX;

    srand(time(NULL));

    for (int iii = 0; iii < 9; iii++){
        rand();
        array[iii] = rand() / rand_max;
    }

    for (int iii = 0; iii < 9; iii++){
        printf("Element %d is: %lf.\n", iii, array[iii]);
    }


    return(0);
}