srand( (unsigned int)time(NULL) );
for(i=0; i<ROW; i++)
{
for(int j=0; j<SIZE; j++)
{
tmp = rand()%2;
if(tmp == 0)
arrCDMA[i][j]=-1;
else
arrCDMA[i][j]=1;
printf("%+d ", arrCDMA[i][j]);
}
printf("\n");
for(j=0; j<i; j++)
{
tmp = 0;
for(int k=0; k<SIZE; k++)
tmp += arrCDMA[i][k]*arrCDMA[j][k];
if(0 == tmp)
{
i--; // 此次循环无效
break;
}
}
}
运行结果:
+1 -1 -1 +1 +1 -1 -1 +1
+1 +1 -1 -1 +1 -1 +1 +1
-1 +1 +1 -1 -1 -1 +1 -1
+1 +1 +1 -1 -1 -1 +1 +1
-1 +1 +1 +1 -1 -1 +1 -1
-1 -1 +1 +1 +1 -1 -1 -1
这个是正常的结果
再看下面的情况
for(i=0; i<ROW; i++)
{
srand( (unsigned int)time(NULL) );
for(int j=0; j<SIZE; j++)
{
tmp = rand()%2;
if(tmp == 0)
arrCDMA[i][j]=-1;
else
arrCDMA[i][j]=1;
printf("%+d ", arrCDMA[i][j]);
}
printf("\n");
for(j=0; j<i; j++)
{
tmp = 0;
for(int k=0; k<SIZE; k++)
tmp += arrCDMA[i][k]*arrCDMA[j][k];
if(0 == tmp)
{
i--; // 此次循环无效
break;
}
}
}
运行结果:
+1 -1 +1 -1 +1 +1 -1 +1
+1 -1 +1 -1 +1 +1 -1 +1
+1 -1 +1 -1 +1 +1 -1 +1
+1 -1 +1 -1 +1 +1 -1 +1
+1 -1 +1 -1 +1 +1 -1 +1
结果是每次生成的随机数都一样。为错误结果。
分析原因:
注意红色代码所在的位置。因为程序运行的时间太短,windows的精确度不够,所以srand每次的设置都是无效的,所以产生的随机数每次都一样。