Есть небольшая либа для решения матричной системы.
Всё работает нормально, пока при попытке инвертировать матрицу порядка 7 на 7, ф-ция аварийно не завершает работу, т.к. получает детерминант=NaN (хотя он чуть превышает 10^6).
Само собой разумеется, в остальных случаях всй считается.

Const TMatrixMaxIndex2D=99
Type TMatrix
Field Buffer$[TMatrixMaxIndex2D]
Field StringSize
Field CSize
End Type
Function TMatrix_Create.TMatrix(size,size2=-1)
M.TMatrix=New TMatrix
M\StringSize=size
M\CSize=size2
If M\CSize=-1 M\CSize=size
Return M
End Function
Function TMatrix_IN(M.TMatrix,SNumber,CNumber,Z$)
Local Index2d=(SNumber-1)*M\StringSize+(CNumber-1)
M\Buffer[Index2d]=Z$
End Function
Function TMatrix_OUT$(M.TMatrix,SNumber,CNumber)
Local Index2d=(SNumber-1)*M\StringSize+(CNumber-1)
Return M\Buffer[Index2d]
End Function
Function TMatrix_Delete(M.TMatrix)
Delete M
End Function
Function TMatrix_Determinant#(M.TMatrix)
SS=M\StringSize
CS=M\CSize
If SS=1 And CS=1
*Return Float(M\buffer[0])
EndIf
Local DET#=0
For i=1 To SS
*MINOR.TMATRIX=TMatrix_minor(M,1,i)
*DET=DET+(-1)^(i+1)*TMatrix_Determinant(MINOR)*Float(TMatrix_OUT(M,1,i))
*TMatrix_Delete(MINOR)
Next
Return Float(DET)
End Function
Function TMatrix_minor.TMatrix(M.TMatrix,NS,NC)
minSS=M\StringSize-1
minCS=M\CSize-1
Minor.TMatrix=TMATRIX_Create(minSS,minCS)
Local Smin=1
For S=1 To M\CSize
*Local Cmin=1
*For C=1 To M\StringSize
* If C=NC
* *Cmin=Cmin-1
* Else
* *TMatrix_IN(Minor,Smin,Cmin,TMatrix_OUT(M,S,C))
* EndIf
* Cmin=Cmin+1
*Next
*If S=NS
* Smin=Smin-1
*EndIf
*Smin=Smin+1
Next
Return Minor
End Function
вот - выдрал необходимые куски кода.
Собсна вопрос - можно как-нить уменьшить кол-во рекурсий, не сильно загромождая код?