Проблема при решении системы линейных уравнений методом Гаусса
Пытаюсь решить системы линейных уравнений методом Гаусса и получаю ошибку на 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;
}
