Проблема при решении системы линейных уравнений методом Гаусса

Пытаюсь решить системы линейных уравнений методом Гаусса и получаю ошибку на 3 тесте. Подскажите как правильно использовать эпсилон и в каком месте в коде могут получиться проблемы с точностью

#include <iostream>
#include <vector>
#include <map>

#define int double
const double EPS = 10e-8;

using namespace std;


bool is_diff_signs(int a, int b) {
    if (a / abs(a) == b / abs(b)) return true;
    return false;
}

vector<int> divise_and_kill(vector<int> a, vector<int> &b, int off) {
    int a_f = a[off], b_f = b[off];

    for (auto &x : a) x *= b_f;

    for (auto &x : b) x *= a_f;

    for (int i = off; i < a.size(); i++) {
        if (is_diff_signs(a_f, b_f)) {
            b[i] -= a[i];
        } else {
            b[i] += a[i];
        }
    }

    return b;
}

int find_next_not_zero(vector<vector<int>> library, int pos, int from) {
    for (int i = from; i < library.size(); i++) {
        if (library[i][pos] != 0)
            return i;
    }
}

using namespace std;

signed main() {

    int n;

    cin >> n;

    vector<vector<int>> library;
    vector<int> res;

    for (int i = 0; i < n; i++) {
        vector<int> nums(n + 1);

        for (int i = 0; i <= n; i++)
            cin >> nums[i];

        library.push_back(nums);
    }

    for (int i = 0; i < n; i++) {
        vector<int> a = library[i];

        if (abs(a[i]) <= EPS) {
            vector<int> temp = a;

            int to_change = find_next_not_zero(library, i, i);

            a = library[to_change];
            library[i] = library[to_change];

            library[to_change] = temp;
        }

        for (int j = i + 1; j < n; j++) {
            if (abs(library[j][i]) <= EPS)
                continue;
            library[j] = divise_and_kill(a, library[j], i);
        }
    }

    for (int i = n - 1; i >= 0; i--) {
        int current = library[i][n];

        for (int j = 0; j < res.size(); j++)
            current -= library[i][n - (j + 1)] * res[j];

        res.push_back(current / library[i][i]);
    }

    for (int i = res.size() - 1; i >= 0; i--)
        cout << res[i] << " ";

    return 0;
}

введите сюда описание изображения


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