2016-02-22 53 views
0

這裏是使用rand()函數的隨機數矩陣乘法的代碼。程序的輸出給出非常大的值作爲矩陣元素。矩陣使用rand()函數隨機數的乘法

爲什麼不生成任何小的隨機數?

這是輸出當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); 
} 
+2

你有沒有檢查'RAND_MAX'有多大? – EOF

+0

使用模運算符得到較小的值(例如rand()%100)。雖然這種方式稍微不均勻分佈,但這不應該成爲一個問題。 – Ctx

+0

'ptr3 [i] [j] + ptr1 [i] [k] * ptr2 [k] [j]'很容易溢出,'RAND_MAX'可能很大。使用一些分隔符,如空格'printf(「%4d」,ptr3 [i] [j]);' – chux

回答

0

使用模運算符來獲得更小的值(例如rand()%100) 。雖然這種方式稍微不均勻分佈,但這不應該成爲一個問題。 - Ctx