2017-08-30 6 views
0

Je suis nouveau ici, donc je suis désolé si ma question est un peu stupide, mais, je calculais les divisions de deux grands nombres et de les stocker dans un tableau, comme ceci:Division des grands nombres renvoie 1 [C++]

int det(double M[25][25], int m) 
{ 
    /*returns large numbers*/ 
} 

int main() 
{ 
    float y[27]; 
    double A[25][25] = {0}, N = 26, D = -134430487042201894894174208; 

    y[0] = 0; 
    y[26] = 1; 

    for (int i = 0; i < N-1; i++) 
    { 
     //Reset A[][] to the original 
     for (int k = 0; k < N-1; k++) 
     { 
      for (int J = 0; J < N-1; J++) 
       { 
        A[k][J] = m[k][J]; 
       } 
     } 
     //Change values of A[j][i] 
     for (int j = 0; j < N-1; j++) 
      { 
       A[j][i] = d[j+1]; 
      } 
     y[i+1] = det(A,N-1)/D; //Here y returns only 0, 1, 1, 1, 1, ... 
    } 
}D 

Alors, qu'est-ce que je fais mal? tableau y retourne 0, 1, 1, 1, 1, ..., et il était censé ne pas être une

det (A, N-1) = D = 7958284334509567005163520 -134430487042201894894174208

det (A, N-1)/D = -0,05919999629259109195883585509348322869497780932400145347 ...

Ce n'est pas 1.

Merci!

+2

La constante '134430487042201894894174208' n'est pas représentable sur la plupart des plates-formes. –

+1

Ces chiffres semblent très grands. Vérifiez les [limites] (http://en.cppreference.com/w/cpp/types/numeric_limits) des types de données que vous utilisez. Vous pourriez avoir besoin d'une bibliothèque bignum pour obtenir des résultats raisonnablement précis. – nwp

+4

Votre exemple ne compile pas. 'm' et' d' ne sont pas définis. S'il vous plaît fournir un [MCVE]. –

Répondre

2

La fonction det renvoie un int. Vous n'allez jamais obtenir des valeurs à virgule flottante.

+0

Vous l'avez jugé! Merci. –