rand() is not returning random values
c, gcc, libc, linux, matrix
Solution
Don't call `srand` before every call to `rand`. Call it once when your program starts.
Problem
Its a small code to generate a random hermitian matrix hermitian matrix. I have called srand() before every call to rand(). but still no randomness in the output. I have used c99's complex datatype feature to create a hermitian matrix. I'm not sure where i'm wrong :( ``` #include <stdio.h> #include <math.h> #include <complex.h> #include <stdlib.h> #include <time.h> #define MATSIZE 5 #define RAND_RANGE 100 double complex mat[MATSIZE][MATSIZE]; void gen_mat() { int i =0,j; int real; int img; for( ;i < MATSIZE; i++) { srand(time(NULL)); real = rand()%RAND_RANGE + 1; srand(time(NULL)); img = rand()%RAND_RANGE + 1; for(j = MATSIZE; j != i ; j--) { mat[i][j] = real + img * I; mat[j][i] = conj(mat[i][j]); } srand(time(NULL)); if(i == j) mat[i][i] = rand()%RAND_RANGE + 0*I; } } void print_mat() { int i,j; for(i = 0; i < MATSIZE; i++) { for(j = 0; j < MATSIZE; j++) { printf("%f + %f *i", creal(mat[i][j]), cimag(mat[i][j])); printf(" "); } puts("\n"); } } int main() { gen_mat(); print_mat(); return 0; } ``` sample output ``` [aft@centos-c physics-numaric]$ ./a.out 66.000000 + 0.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + -67.000000 *i 66.000000 + 0.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + -67.000000 *i 66.000000 + 0.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + -67.000000 *i 67.000000 + -67.000000 *i 66.000000 + 0.000000 *i 67.000000 + 67.000000 *i 67.000000 + 67.000000 *i 67.000000 + -67.000000 *i 67.000000 + -67.000000 *i 67.000000 + -67.000000 *i 66.000000 + 0.000000 *i ``` EDIT calling srand in main() actually solved the problem. Thank you guys. ``` [aft@centos-c physics-numaric]$ ./a.out 31.000000 + 0.000000 *i 81.000000 + 75.000000 *i 81.000000 + 75.000000 *i 81.000000 + 75.000000 *i 81.000000 + 75.000000 *i 81.000000 + -75.000000 *i 53.000000 + 0.000000 *i 69.000000 + 57.000000 *i 69.000000 + 57.000000 *i 69.000000 + 57.000000 *i 69.000000 + 57.000000 *i 69.000000 + -57.000000 *i 27.000000 + 0.000000 *i 93.000000 + 11.000000 *i 93.000000 + 11.000000 *i 93.000000 + 11.000000 *i 69.000000 + -57.000000 *i 93.000000 + -11.000000 *i 58.000000 + 0.000000 *i 76.000000 + 78.000000 *i 76.000000 + 78.000000 *i 69.000000 + -57.000000 *i 93.000000 + -11.000000 *i 76.000000 + -78.000000 *i 67.000000 + 0.000000 *i ```