title: deteminant of n*n matrix
body: <p>I am trying to implement code &amp; algorithms found here:</p>
  
  <p><a href="https://stackoverflow.com/questions/3013419/deteminant-of-matrix">deteminant of matrix</a>
  and here:
  <a href="https://stackoverflow.com/questions/5051528/how-to-calculate-matrix-determinant-nn-or-just-55">How to calculate matrix determinant? n*n or just 5*5</a></p>
  
  <p>But I am stuck with it.</p>
  
  <p><strong>My first question</strong> is what rule actually this algorithms use (as there are obviously several rules in math by which someone can calculate determinant) - so I would like to check on first place if the algorithm is applied correctly.</p>
  
  <p><strong>My second question</strong> is what I done wrong (I mean with implementation) or what is wrong with algorithm itself, as it looks like that for 3x3 and 4x4 it works fine, but for 5x5 it gives NaN. Results are checked with several online matrix determinant calculators, and they are fine except for 5x5.</p>
  
  <p>This is my code:</p>
  
  <pre><code>using System;
  
  public class Matrix
  {
      private int row_matrix; //number of rows for matrix
      private int column_matrix; //number of colums for matrix
      private double[,] matrix; //holds values of matrix itself
  
      //create r*c matrix and fill it with data passed to this constructor
      public Matrix(double[,] double_array)
      {
          matrix = double_array;
          row_matrix = matrix.GetLength(0);
          column_matrix = matrix.GetLength(1);
          Console.WriteLine("Contructor which sets matrix size {0}*{1} and fill it with initial data executed.", row_matrix, column_matrix);
      }
  
      //returns total number of rows
      public int countRows()
      {
          return row_matrix;
      }
  
      //returns total number of columns
      public int countColumns()
      {
          return column_matrix;
      }
  
      //returns value of an element for a given row and column of matrix
      public double readElement(int row, int column)
      {
          return matrix[row, column];
      }
  
      //sets value of an element for a given row and column of matrix
      public void setElement(double value, int row, int column)
      {
          matrix[row, column] = value;
      }
  
      public double deterMatrix()
      {
          double det = 0;
          double value = 0;
          int i, j, k;
  
          i = row_matrix;
          j = column_matrix;
          int n = i;
  
          if (i != j)
          {
              Console.WriteLine("determinant can be calculated only for sqaure matrix!");
              return det;
          }
  
          for (i = 0; i &lt; n - 1; i++)
          {
              for (j = i + 1; j &lt; n; j++)
              {
                  det = (this.readElement(j, i) / this.readElement(i, i));
  
                  //Console.WriteLine("readElement(j, i): " + this.readElement(j, i));
                  //Console.WriteLine("readElement(i, i): " + this.readElement(i, i));
                  //Console.WriteLine("det is" + det);
                  for (k = i; k &lt; n; k++)
                  {
                      value = this.readElement(j, k) - det * this.readElement(i, k);
  
                      //Console.WriteLine("Set value is:" + value);
                      this.setElement(value, j, k);
                  }
              }
          }
          det = 1;
          for (i = 0; i &lt; n; i++)
              det = det * this.readElement(i, i);
  
          return det;
      }
  }
  
  internal class Program
  {
      private static void Main(string[] args)
      {
          Matrix mat03 = new Matrix(new[,]
          {
              {1.0, 2.0, -1.0},
              {-2.0, -5.0, -1.0},
              {1.0, -1.0, -2.0},
          });
  
          Matrix mat04 = new Matrix(new[,]
          {
              {1.0, 2.0, 1.0, 3.0},
              {-2.0, -5.0, -2.0, 1.0},
              {1.0, -1.0, -3.0, 2.0},
              {4.0, -1.0, -3.0, 1.0},
          });
  
          Matrix mat05 = new Matrix(new[,]
          {
              {1.0, 2.0, 1.0, 2.0, 3.0},
              {2.0, 1.0, 2.0, 2.0, 1.0},
              {3.0, 1.0, 3.0, 1.0, 2.0},
              {1.0, 2.0, 4.0, 3.0, 2.0},
              {2.0, 2.0, 1.0, 2.0, 1.0},
          });
  
          double determinant = mat03.deterMatrix();
          Console.WriteLine("determinant is: {0}", determinant);
  
          determinant = mat04.deterMatrix();
          Console.WriteLine("determinant is: {0}", determinant);
  
          determinant = mat05.deterMatrix();
          Console.WriteLine("determinant is: {0}", determinant);
      }
  }
  </code></pre>