// determinant.c #include #define abs(x) ((x)<0.0?(-(x)):(x)) double determinant(int n, double A[n][n]) { double D = 1.0; /* DETERMINANT */ double *B; /* WORKING MATRIX */ int *ROW; /* ROW INTERCHANGE INDICIES */ int HOLD , I_PIVOT; /* PIVOT INDICIES */ double PIVOT; /* PIVOT ELEMENT VALUE */ double ABS_PIVOT; int i, j, k; B = (double *)calloc(n*n, sizeof(double)); for(i=0; i ABS_PIVOT ) { I_PIVOT = i; PIVOT = B[ROW[i]*n+k]; ABS_PIVOT = abs(PIVOT); } } if(I_PIVOT != k) { HOLD = ROW[k]; ROW[k] = ROW[I_PIVOT]; ROW[I_PIVOT] = HOLD; D = - D; } if(ABS_PIVOT < 1.0E-20) { free(B); free(ROW); return ABS_PIVOT; } else { D = D * PIVOT; for(j=k+1; j