Не может получить точный результат для детерминанта

Прежде всего, я новичок в Ci, попробуйте получить определитель матрицы NXN с этим кодом

double Determinant(double *A, int N){
int i;
int j;
int k;
double y[100][100];
double x[100][100];
int sign = 1;
double result = 0;
int arrayRow;
int arrayColumn;

for(i = 0 ; i < N ; i++){
    for(j = 0; j < N ;j++){
        x[i][j] = A[(N*i)+j];}}

if(N == 2){
    result =x[0][0]*x[1][1] - x[0][1]*x[1][0];
    }   
else
    {
    for(i = 0; i < N ; i++){
        arrayRow = 0;
        arrayColumn = 0;
        for(j = 1 ;j < N; j++){
            for( k = 0; k < N ; k++){
                if(k == i){
                continue;}
                y[arrayRow][arrayColumn] =x[j][k];
                arrayColumn++;
            }
            arrayColumn = 0;
            arrayRow++;
         }



        result += sign*x[0][i]*Determinant(*y,N-1);
       sign = -sign;}
}
printf("%d",result);
return result;
} /* end-Determinant */

но он показывает что-то очень неожиданное число, например -85899... . это тестовый код и определитель не возвращает правильный результат.

int main(){
 double A[] = {5, 2, 4, 2, 4, 6, 1, 2, 8};
 int a ;

 if(Determinant(A, 3) == 80){
  a = Determinant(A,3);
  printf("%d",a);};
  getchar();
} /* end-main */

1 ответ

У вас неправильный спецификатор формата в printf.

Пытаться: printf("%f",a); а также printf("%f",result);

См. Спецификаторы формата printf здесь http://www.cplusplus.com/reference/cstdio/printf/ (% d для целых чисел, а не для двойных).

Другие вопросы по тегам