试图用drand48生成一个n大小的矩阵,其中包含所有随机数,但它只返回0,出于某种原因,编译器警告我,当手册页明确指出应该是double时,drand将返回int,有人能告诉我我我做错了什么吗?函数被称为./matrix 4,其中第二个参数是nxn矩阵的n,im是在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");
    }

}

最佳答案

是的,drand48返回双倍。问题是您正在将结果存储到ints的数组中
drand48()和erand48()函数返回非负的双精度浮点值,在区间[0.0,1.0]上均匀分布。
由于代码声明了一个二维数组drand48s,int的所有结果都被截断为0,因为函数返回的值是0-1。
将数组声明更改为:

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

关于c - drand48返回全0吗? (C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29902445/

10-12 14:12