2017-08-30 2 views
0

Ich bin neu hier, also tut mir leid, wenn meine Frage eine Art dumm ist, aber ich berechnete die Divisionen von zwei großen Zahlen und speichert sie in einem Array, wie folgt:Große Zahlen-Division gibt 1 zurück [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 

Also, was mache ich falsch? y-Array liefert 0, 1, 1, 1, 1, ..., und es sollte nicht mehr als 1

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

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

Es ist nicht 1.

Dank!

+2

Die Konstante '134430487042201894894174208' ist auf den meisten Plattformen nicht darstellbar. –

+1

Diese Zahlen sehen sehr groß aus. Überprüfen Sie die [limits] (http://en.cppreference.com/w/cpp/types/numeric_limits) der Datentypen, die Sie verwenden. Sie benötigen möglicherweise eine Bignum-Bibliothek, um einigermaßen genaue Ergebnisse zu erhalten. – nwp

+4

Ihr Beispiel kompiliert nicht. 'm' und' d' sind nicht definiert. Bitte gib ein [MCVE] an. –

Antwort

2

Die Funktion det gibt einen int zurück. Sie werden niemals Gleitkommawerte daraus erhalten.

+0

Sie entschieden es! Vielen Dank. –