Esempio n. 1
0
 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("Отсутсвуют коэффициенты при неизвестных");
         }
     }
 }