public void Solve() { if (_mathProvider.GreaterZero(_mathProvider.Abs(A))) // квадратное уравнение { T Discriminant = _mathProvider.Add(_mathProvider.Multiply(B, B), _mathProvider.MultiplyByKoef(-4, _mathProvider.Multiply(A, C))); if (_mathProvider.GreaterZero(_mathProvider.Abs(Discriminant))) // два решения { Result.R1 = _mathProvider.Divide(_mathProvider.Subtract(_mathProvider.Sqrt(Discriminant), B), _mathProvider.MultiplyByKoef(2, A)); Result.R2 = _mathProvider.Divide(_mathProvider.Subtract(_mathProvider.Negate(B), _mathProvider.Sqrt(Discriminant)), _mathProvider.MultiplyByKoef(2, A)); } else // одно решение { Result.R1 = _mathProvider.Divide(_mathProvider.Negate(B), _mathProvider.MultiplyByKoef(2, A)); } } else if (_mathProvider.GreaterZero(_mathProvider.Abs(B))) // линейное уравнение { Result.R1 = _mathProvider.Divide(_mathProvider.Negate(C), B); } else // совсем вырожденный случай { if (_mathProvider.GreaterZero(_mathProvider.Abs(B))) { throw new ArgumentException("Отсутсвуют коэффициенты при неизвестных"); } } }