void GetDeterminant(double **matrix, int size, double epsilon)
{
//Предполагается, что матрица квадратная
int pivot_index = -1;
double pivot_value = 0;
double determinant = 1;
for(int i = 0; i < size; i++)
{
for(int j = i; j < size; j++)
{
if(abs(matrix[j][i]) > pivot_value)
{
pivot_index = j;
pivot_value = abs(matrix[j][i]);
}
}
//Если опорный элемент равен нулю (эпсилон для сброса погрешности)
if(pivot_value < epsilon)
{
//Матрица вырождена
return 0;
}
if(pivot_index != i)
{
//Обменяем строки местами
SwapRows(matrix, pivot_index, i)
determinant *= -1;
}
for(int j = i + 1; j < size; j++)
{
if(matrix[j][i] != 0)
{
multiplier = 1 / matrix[i][i] * matrix[j][i];
for(int k = i; k < size; k++)
{
matrix[j][k] -= matrix[i][k] * multiplier;
}
}
}
determinant *= matrix[i][i];
}
return determinant;
}
С сями не работал уже сто лет, так что синтаксические ошибки обеспечены. Особенно с типами.
Но, думаю, смысл понятен.