>>164の続き

double getDeterminant(double *a, int rowLength, int colLength)
{
  double  determinant = (double)0;
  double  minorDeterminant = (double)0;
  double  *partMatrix = NULL;
  int    i = 0;
  int    j = 0;
  int    k = 0;
  if(rowLength < 2 || colLength < 2 || rowLength != colLength){
    goto catch;
  }
  if(rowLength == 2){
    determinant = MATRIX_FACT(0, 0) * MATRIX_FACT(1, 1) - MATRIX_FACT(0, 1) * MATRIX_FACT(1, 0);
  }
  else{
    for(i = 0; i < rowLength; i++){
      partMatrix = (double *)malloc(sizeof(a[0]) * (rowLength - 1) * (colLength - 1));
      for(j = 0; j < i; j++){
        for(k = 0; k < colLength - 1; k++){
          PART_MATRIX_FACT(j, k) = MATRIX_FACT(j, k + 1);
        }
      }
      for(j = i; j < rowLength - 1; j++){
        for(k = 0; k < colLength - 1; k++){
          PART_MATRIX_FACT(j, k) = MATRIX_FACT(j + 1, k + 1);
        }
      }

(続く)