некорректно работает вычитание матриц

У меня почему то неправильно выполняется разность матриц , начиная с "проверки" , в AX-B должен получится ноль , а в AA^(-1) и A^(-1)*A единичная матрица , если ошибка в функции то помогите найти ее , без понятия что неправильно P.S в цикле расчета обратной матрицы ошибок нет , проверял , выводил , получалась единичная и обратная ПОМОГИТЕ ПОЖАЛУЙСТА , уже час не пойму в чем проблема((((

#include <iostream>
#include <math.h>
#include <ctime>
#include <iomanip>
using namespace std;
#define clean system("cls");
#define next cout<<endl;
void Razmtx(double** A, double** B, double** C, int size)//вычисление суммы матриц
{
    for (int i = 0; i < size; i++) {// результат суммирования матриц в новую матрицу
        for (int j = 0; j < size; j++)
        {
            C[i][j] = A[i][j] - B[i][j];
        }
        next
    }
}
void Multimass(double **T,double **B,double **X,int size,int size1)
{
    for (int i = 0; i < size; i++) {
        for (int j = 0; j <size1; j++)
        {
            X[i][j] = 0;
            for (int k = 0; k < size; k++)
            {
                X[i][j] += T[i][k] * B[k][j];
            }
        }
    }
}
void Showmtx(double **A,int size,int size1)
{
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size1; j++)
        {
            cout << fixed << setprecision(4) << setw(8) << A[i][j] << " ";
        }
        next
    }
}
int Gaussmethod(double** A,double **B, double** T, int size)
{
    double eps = 1e-10; int det = 1;
    double** A1 = new double* [size];//копия матрицы А
    for (int i = 0; i < size; i++)
    {
        A1[i] = new double[size];
    }
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            A1[i][j] = A[i][j];
        }
    }
    double** B1 = new double* [size];//копия матрицы В
    for (int i = 0; i < size; i++)
    {
        B1[i] = new double[1]; 
    }
    double** X = new double* [size];//матрица X(матрица решений)
    for (int i = 0; i < size; i++)
    {
        X[i] = new double[1];
    }
    cout << "A=" << endl; Showmtx(A, size, size);
    cout << "T=" << endl; Showmtx(T, size, size);
    for (int i = 0; i < size; i++)
    {
        int imax = i;
        for (int j = 0; j < size; j++) { if (fabs(A[j][i]) > fabs(A[imax][i])) imax = j; }
        if (fabs(A[imax][i] < eps)) { cout << "det(A)=0;Ending the programm"; return 0; }

        if (i != imax)
        {
            for (int j = 0; j < size; j++) { swap(A[i][j], A[imax][j]); swap(T[i][j], T[imax][j]); }
        }
        double t = A[i][i];
        det *= t;
        for (int j = 0; j < size; j++)
        {
            A[i][j] /= t; T[i][j] /= t;

        }
        for (int j = 0; j < size; j++)
        {
            if (j == i) continue;
            for (int k = 0; k < size; k++)
            {
                A[j][k] -= A[i][k] * A[j][i]; T[j][k] -= T[i][k] * T[j][i];
            }
        }
    }
    
    cout << "obratnya mtx posle" << endl;
    Showmtx(T, size, size); next
    cout << "osnovnaya posle" << endl;
    Showmtx(A, size, size); next
    cout << "X=A^(-1)*B" << endl;
    Multimass(T, B, X, size, 1); next
    cout << "T=" << endl; Showmtx(T, size, size); next
    cout << "B=" << endl; Showmtx(B, size, 1); next
    Multimass(T, B, X, size, 1); next
    cout << "X=" << endl; Showmtx(X, size, 1); next
    
    
    
    cout << "A*X=" << endl; 
    cout << "A=" << endl;
    Showmtx(A1, size, size); next
    cout << "X" << endl;
    Showmtx(X, size, 1); next
    Multimass(A1, X, B1, size, 1);
    cout << "B1=" << endl;
    Showmtx(B1, size, 1); next
    
        
    cout << "A*X-B" << endl;
    cout << "B1=" << endl;
    Showmtx(B1, size, 1); next
    cout << "B=" << endl;
    Showmtx(B, size, 1); next
    Razmtx(B1, B, B1, size);
    Showmtx(B1, size, 1); next
    
    cout << "A*A^(-1)" << endl;
    cout << "A1=" << endl;
    Showmtx(A1, size, size); next
    cout << "T=" << endl;
    Showmtx(T, size, size); next
    Multimass(A1, T, A, size, size);
    
    cout << "A^(-1)*A" << endl;
    cout << "T=" << endl;
    Showmtx(T, size, size); next
    cout << "A=" << endl;
    Showmtx(A, size, size); next
    Multimass(T, A1, A, size, size);
    return 0;
}
int main()
{
    setlocale(LC_ALL, "rus");
    int size; int choice;
     cout << "\t\t\t\tВведите размерность матрицы" << endl;
     cin >> size;
     srand(time(NULL));
     double** A = new double* [size];//матрица A(матрица size * size)
     for (int i = 0; i < size; i++)
     {
         A[i] = new double[size];
     }
     double** B = new double* [size];//матрица B(матрица size * 1)
     for (int i = 0; i < size; i++)
     {
         B[i] = new double[1];
     }
     double** T = new double* [size];//матрица T(единичная)
     for (int i = 0; i < size; i++)
     {
         T[i] = new double[size];
     }
     
     cout << "Ввод значений матрицы А и В \n1)Автоматически\n2)Вручную" << endl;
     cin >> choice;
     switch (choice)
     {
     case 1:
     {
         for (int i = 0; i < size; i++) {
             for (int j = 0; j < size; j++)
             {
                 A[i][j] = rand() % 20;
             }
             next;
         }
        
         for (int i = 0; i < size; i++)
         {
             B[i][0] = rand() % 20;
         }
         break;
     }
     case 2:
     {
         for (int i = 0; i < size; i++) 
         {
             for (int j = 0; j < size; j++)
             {
                 cout << "A[ " << i << "," << j << " ]= ";
                 cin >> A[i][j];
             }

         }
         for (int i = 0; i < size; i++)
         {
             cout << "B[" << i << "][" << 0 << "]= "; cin >> B[i][0];
         }
         next
         break;
     }
     }
     for (int i = 0; i < size; i++)
     {
         for (int j = 0; j < size; j++)
         {
             if (i == j) { T[i][j] = 1.0; }
             else { T[i][j] = 0.0; }
         }
     }
     Gaussmethod(A,B,T,size);
 
 
     return 0;
 }

Ответы (0 шт):