2015-04-27 45 views
0

試圖用drand48製作一個包含所有隨機數的n大小的矩陣,但它只返回0,並且由於某種原因,編譯器給我一個警告,即當手冊頁明確指出它應該是drand返回的整數一個雙,可以有人請告訴我什麼即時做錯了?函數被調用像./matrix 4其中第二ARG是n的n×n的矩陣,IM在薄荷的Linuxdrand48全部返回0嗎? (C)

int main(int argc, char* argv[]){ 
    int matrixSize = atoi(argv[1]); 
    printf("matrixsize %d\n", matrixSize); 

    //create matrix of n size 
    int mat[matrixSize][matrixSize],i,j; 
    for(i = 0; i < matrixSize; ++i){ 
     for(j = 0; j < matrixSize ; ++j){ 
      mat[i][j] = drand48(); 
      printf("%f\n", mat[i][j]); 
     } 
    printf("\n"); 
    } 

} 

回答

2

是發展中國家,drand48不會返回雙打。問題是你將結果存儲到一個int的數組中。從drand48文檔:()

的drand48和erand48()函數返回非負,雙精度浮點值,在區間[0.0,1.0]均勻地分佈。

由於您的代碼聲明的int秒的2維陣列,的drand48()所有結果被截斷爲0,因爲該函數從0-1返回值。

改變數組聲明:

//create matrix of n size 
double mat[matrixSize][matrixSize],i,j; 
+0

就是這樣,太感謝你了,將會使答案在10分鐘 – REALLYANGRYSTUDENT

+1

你也應該種子的RNG,如果你不想要的確切一些結果每次你運行你的程序。在打印語句下面添加「srand48(time(NULL))」。 – MrHappyAsthma

+0

^^不知道我需要這麼做,非常感謝! – REALLYANGRYSTUDENT