drand48返回全0? (C)

时间:2015-04-27 17:37:34

标签: c matrix

尝试使用drand48制作一个包含所有随机数的n大小的矩阵,但它只返回0,并且出于某种原因编译器给出了一个警告,当手册页清楚地表明它应该是双重时,drand返回整数,有人可以告诉我,我做错了什么?函数被称为./matrix 4,其中第二个arg是n的nxn矩阵,我在mint linux上开发

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");
    }

}

1 个答案:

答案 0 :(得分:2)

是的,drand48确实会返回双打。问题是您将结果存储到int的数组中。来自drand48的文档:

  

drand48()和erand48()函数返回非负的,双精度的浮点值,均匀分布在区间[0.0,1.0]上。

由于您的代码声明了int的二维数组,因此drand48()的所有结果都被截断为0,因为该函数返回的值为0-1。

将数组声明更改为:

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