Вы говорите, что пишете программу, которая решает системы уравнений.Это довольно сложная проблема.Если вы хотите использовать только такую программу, вам лучше использовать библиотеку, написанную кем-то другим.Я предполагаю, что вы действительно хотите написать программу самостоятельно, для развлечения и / или образования.
Вы определили главную проблему: использование чисел с плавающей запятой приводит к округлению и, следовательно, к неточным результатам.Есть два решения для этого.
Первое решение - не использовать числа с плавающей запятой.Используйте только целые числа и приведите матрицу к строке в виде ряда (не сокращается);это можно сделать без делений.Поскольку все вычисления с целыми числами являются точными, точка, которая должна быть равна 0, будет точно равна 0 (на самом деле, может быть проблема с переполнением).Конечно, это будет работать, только если матрица, с которой вы начинаете, состоит из целых чисел.Вы можете обобщить этот подход, работая с дробями вместо целых чисел.
Второе решение - использовать числа с плавающей запятой и быть очень осторожным.Это тема целой отрасли математики / информатики, называемой численным анализом.Это слишком сложно объяснить в ответе здесь, поэтому вы должны получить книгу по числовому анализу.Проще говоря, вы хотите сказать, что если Math.abs (pivot) <небольшое значение, то вы предполагаете, что pivot должен быть равен нулю, но это что-то вроде .0000000001 из-за ошибок округления, поэтому выпросто ведите себя так, как будто точка опоры равна нулю.Проблема в том, чтобы выяснить, что такое «небольшая ценность».</p>