2017-08-30 76 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

你裁定它!谢谢。 –