gpt4 book ai didi

c - rand() 函数错误 : same numbers into a for loop

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:38 24 4
gpt4 key购买 nike

我对 rand() 函数有疑问。我想随机生成 eps 值,对于 i=0,...,VOL 彼此不同。但是,当我打印 eps 时,它总是一样的。你能告诉我我的代码有什么问题吗?谢谢。

    ...
#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);

}
}
}

完整的部分代码(要复制整个代码是不可能的,因为它很长)是:

#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;

}

随机播放函数是:

double shuffle_signals(float array[VOL])

{
srand((unsigned int) time(NULL));

if(VOL>1)
{
int i,j,t;
for(i=0; i<VOL;i++)
{
j=i+rand()/((float)RAND_MAX/(VOL-i)+1.);
t=array[j];
array[j]=array[i];
array[i]=t;

if(array[i]==1){
signal2[i]=MIN;
signal1[i]=MAX;
}
else if(array[i]==0){
signal2[i]=MIN;
signal1[i]=MIN;
}
else if (array[i]==2){
signal1[i]=MAX;
signal2[i]=MAX;
}
tot_sig= signal1[i]+signal2[i];
}
// printf("tot_sign: %lf\n", tot_sig);
}
return tot_sig;
}

}

其他部分无关紧要。你可以认为 'a' 是一个常数,H_PR=0.5 和 L_PR=0.1多谢。

最佳答案

您在循环内重复调用 shuffle_signals()。每次访问此函数时,您都会调用 srand(),它会根据当前时间(自 1970 年以来的秒数)重置随机数生成器。您应该只在您的程序中调用一次 srand()main() 顶部附近的某个地方是执行此操作的好地方。

关于c - rand() 函数错误 : same numbers into a for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com