我的rand()函数有问题。我想随机生成eps值,彼此不同,i = 0,...,VOL。 但是,当我打印eps时,它总是一样的。 你能告诉我代码中的错误吗?谢谢。
GITHUB_PAT
代码的完整部分(复制整个代码是不可能的,因为它很长)是:
...
#include <time.h>
...
void function(...);
int main(){
function();
return 0;
}
void function(...){
srand((unsigned int)time(NULL));
...
for(i=0;i<VOL;i++){
signal1[i]=0.; // No signal
eps=rand()/(RAND_MAX+0.5);
if(signal1[i]==(MIN+MAX)){
net[i]= 0;
exp[i]=a+eps;
printf("eps: %f\n", eps);
}
}
}
和shuffle功能是:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define VOL 15
#define MAX 10
#define MIN 0
float random_sign_high[VOL]={2,2,2,2,2,2,2,2,2,1,1,1,1,1,0};
float random_sign_low[VOL]={2,2,2,2,2,2,2,2,1,1,1,1,1,0,0};
void function();
int main(){
function();
return 0;
}
void function(){
...
srand((unsigned int)time(NULL));
for(i=0;i<VOL;i++){
signal1[i]=0.; // No signal
signal2[i]=0.; // No signal
if(H_PR!=0){
shuffle_signals(random_sign_high);
}
if(L_PR!=0){
shuffle_signals(random_sign_low);
}
eps=rand()/(RAND_MAX+0.5);
printf("eps: %f\n", eps);
if(tot_sig==(MIN+MAX)){
net[i]= 0;
exp_p[i]=a+eps;
}
其他部分无关紧要。你可以想到&#39; a&#39;是常数,H_PR = 0.5,L_PR = 0.1 非常感谢。
答案 0 :(得分:2)
你在循环内反复调用shuffle_signals()
。每次访问此功能时,都会调用srand()
,它会根据当前时间(自1970年以来的秒数)重置随机数生成器。您只应在程序中拨打srand()
一次。靠近main()
顶部的地方将是一个很好的地方。
答案 1 :(得分:1)
函数:shuffle_signals()
是递归的,但是,函数:srand()
只能在整个程序中调用一次。建议将呼叫转移到srand()
函数的早期main()
。
答案 2 :(得分:0)
你可以这样做:
int main ()
{
int x;
x = rand() % 100; // here you got always the same value
printf ("Our first number: %d\n", x);
srand ( time(NULL) ); // from now on you'll get random values
x = rand() % 100;
printf ("Some random number: %d\n", x);
x = rand() % 100;
printf ("The first number again: %d\n", x);
return 0;
}
在unsigned int
中添加srand(unsigned int(time(NULL)))
时,没有任何内容影响随机值,因此您可以添加或保留结果即可。