我在using time.h获取random种子initialization时对问题进行了一些搜索。特别是在我的情况下,我想将time放在主函数之外。
根据评论,我做了一些修改。在include as中包含两次之后,这些错误和警告就会消失:
too few arguments to function ‘random’
implicit declaration of function ‘srandom’ [-Wimplicit-function-declaration]
too few arguments to function ‘random’
我将代码声明为:
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <unistd.h>
#include <math.h>
int main(void)
{
struct timeval time;
...
}
它有效,但它必须移到主外面。但如果我改为:
#include <sys/time.h>
struct timeval time;
int main(void)
{
...
}
它给了我错误:
‘time’ redeclared as different kind of symbol
在我的情况下,我正在处理的实现是在C而不是C++。当我尝试将代码移动到函数以便每次调用函数时接收不同的随机数时,会发生其他一些错误:
double myRandom(double dAverage,double dStddev);
double myRandom(double dAverage,double dStddev){
int iRandom1, iRandom2;
double dRandom1, dRandom2,result;
long int liSampleSize;
iRandom1=(random());
dRandom1=(double)iRandom1 /2147483647;
iRandom2=(random());
dRandom2=(double)iRandom2 /2147483647;
result= dAverage + dStddev * sqrt(-2.0 * log(dRandom1))*cos(6.28318531 * dRandom2);
return(result);
}
int main(void){
...
struct timeval time;
gettimeofday(&time, NULL);
srandom((unsigned int) time.tv_usec);
for (i=0; i<liSampleSize;i++)
{ result=myRandom(dAverage,dStddev);
}
}
显然是should be working。有人知道这里有什么问题。所有评论都非常感谢。
更新:然后,从myRandom中取出srandom使得生成的值符合预期。所以,它有效!
答案 0 :(得分:2)
第一个错误与time.h
有关。包括它会向您的全局命名空间引入一些名为time
的实例。
第二种情况很可能是因为您还没有包含stdlib.h
。