我有一个随机函数,它根据某些间隔的可能性给出数字。
int myrand (float array[]){ //this function gives an interval according to
// possibilities
float possib[part];
int i;
float r;
possib[0]=array[3];
for (i=1;i<part;i++)
possib[i]=possib[i-1]+array[i+3];
r=(float)rand()/32767;
printf(" r= %f ",r); //this is to check whether r is different in every run
for(i=0;i<part;i++){
if(r<possib[i]){
return i;
break;
}
}
}
double myrandfinal(float array[],int n){ //this function gives a random
double final; //double in the chosen interval
final=array[n]+(((float)rand()/32767)*(array[n]-array[n-1]));
printf("final= %f",final-array[n]); //again to check
return final;
}
float eval() {
float l;
float interval[]={3.25,4.00,4.75,5.50};
float flar[]={0.1,0.25,0.15,0.5};
l=myrandfinal(interval,myrand(flar));
return 3+l;
}
主要是我有如下内容:
int main(){
int i;
srand(time(NULL));
for(i=0;i<10;i++)
printf("%f",eval()); //the evaluate function
}
问题是,当我期待这样的输出时:
6.50
7.25
7.60
...
我收到如下输入:
6.50
6.50
6.50
...
虽然我在所有检查中得到不同的数字,但评估函数的结果是相同的。主要是我刚写的时候
printf("%f",eval());
没有循环并自己执行几次,我得到不同的结果。原因是什么?
抱歉我的错误,我是新用户,我正在努力适应它:)
最佳答案
由于我们没有看到所有相关代码,因此我们只能猜测。 (使用计算)rand()
产生常量值的两个原因:
- 使用相同的参数重复调用 srand()
- 整数运算,例如截断小数部分的除法或(例如)始终得出 0。
关于c - rand() 在循环中给出相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865727/