c - 使用 rand() 函数进行随机数的矩阵乘法

标签 c matrix-multiplication dynamic-memory-allocation

这里是使用rand()函数进行随机数矩阵乘法的代码。程序的输出给出了非常大的值作为矩阵元素。

Why not any small random numbers not generated??

这是 N=3 时的输出

输入 N 的值:3

最终矩阵:

259448206-96933429-936226671  
-409898077185182340844598571  
-1916994436-653447116470937338   

程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
    time_t t;
    int **ptr1, **ptr2, **ptr3;
    int N, col1, row2, col2;
    srand ((unsigned) time (&t));
    int i, j, k;
    printf ("\nEnter the value of N : ");
    scanf ("%d", &N);
    ptr1 = (int **) malloc (sizeof (int *) * N);
    ptr2 = (int **) malloc (sizeof (int *) * N);
    ptr3 = (int **) malloc (sizeof (int *) * N);

    for (i = 0; i < N; i++)
        ptr1[i] = (int *) malloc (sizeof (int) * N);
    for (i = 0; i < N; i++)
        ptr2[i] = (int *) malloc (sizeof (int) * N);
    for (i = 0; i < N; i++)
        ptr3[i] = (int *) malloc (sizeof (int) * N);

    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            ptr1[i][j] = rand ();
        }
    }

    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            ptr2[i][j] = rand ();
        }
    }

    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            ptr3[i][j] = 0;
            for (k = 0; k < N; k++)
                ptr3[i][j] = ptr3[i][j] + ptr1[i][k] * ptr2[k][j];
        }
    }

    /* Printing the contents of third matrix. */

    printf ("\n\nFinal Matrix :");
    for (i = 0; i < N; i++) {
        printf ("\n\t");
        for (j = 0; j < N; j++)
            printf ("%4d", ptr3[i][j]);
    }

    printf ("\n");
    return (0);
}

最佳答案

使用模运算符获取较小的值(例如 rand()%100)。虽然它的分布稍微不均匀,但这不应该成为问题。 –Ctx

关于c - 使用 rand() 函数进行随机数的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566247/

相关文章:

c - 了解快速平方根反比中的指针语法

c - 数组问题C的动态分配

c# - 为什么 2048x2048 与 2047x2047 数组乘法相比性能会受到巨大影响?

floating-point - 哪种方法计算矩阵矩阵向量乘积 A B u 的精度更高?

python - 为什么 numpy 不允许数组乘以标量?

c - 如何动态地将新数据添加到二维数组?

C++ realloc same pointer warranty

c - 如何在C中将16位值拆分为两个8位值

c - 为 OpenGL 程序简洁地存储原子模型数据

c - 如何用C语言编写LEGO Mindstorms EV3?