2017-08-30 50 views
0

我是新來的所以我很抱歉,如果我的問題是一種愚蠢的,但是,我計算兩個大數的分割並將它們存儲在一個數組中,如下所示:大數除法返回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 

那麼,我做錯了什麼? ÿ陣列返回0,1,1,1,1,...,和它應該不會1個

DET(A,N-1)= 7958284334509567005163520 d = -134430487042201894894174208

DET( A,N-1)/ d = -0.05919999629259109195883585509348322869497780932400145347 ...

這不是1

謝謝!

+2

常量'134430487042201894894174208'在大多數平臺上不可表示。 –

+1

這些數字看起來非常大。檢查您正在使用的數據類型的[limits](http://en.cppreference.com/w/cpp/types/numeric_limits)。您可能需要一個bignum庫來獲得相當準確的結果。 – nwp

+4

你的例子不能編譯。沒有定義'm'和'd'。請提供[MCVE]。 –

回答

2

函數det返回一個int。你永遠不會從它獲得浮點值。

+0

你裁定它!謝謝。 –