private void SolveQuadratic(double a, double b) { var sqrD = ShitMath.Sqrt(Discriminant); var rootVal = (-b + sqrD) / (2 * a); var rootStr = _shouldNotReduceFraction ? "" + (-b + sqrD + "/" + 2 * a) : "" + rootVal; if (Regex.Match(rootStr, @"\-.+\/\-.+").Success) { rootStr = rootStr.Replace("-", ""); } Steps.Add( $"[Calculating first root]\tx0 = (-b + sqrt(D)) / 2a = ({-b} + {sqrD}) / {2 * a} = {rootStr}"); Roots.Add(rootStr); if (Discriminant > 0) { rootVal = (-b - sqrD) / (2 * a); rootStr = _shouldNotReduceFraction ? "" + (-b - sqrD + "/" + 2 * a) : "" + rootVal; if (Regex.Match(rootStr, @"\-.+\/\-.+").Success) { rootStr = rootStr.Replace("-", ""); } Steps.Add( $"[Calculating second root]\tx0 = (-b - sqrt(D)) / 2a = ({-b} - {sqrD}) / {2 * a} = {rootStr}"); Roots.Add(rootStr); } }
private void SolveComplex(double a, double b) { var sqrD = ShitMath.Sqrt(-Discriminant); var real = -b / (2 * a); var imaginary = ShitMath.Abs(sqrD / (2 * a)); var rStr = _shouldNotReduceFraction ? -b + "/" + 2 * a : "" + real; var iStr = _shouldNotReduceFraction ? sqrD + "/" + 2 * a : "" + imaginary; Steps.Add($"[Real part of roots]\t\tr = -b / 2a = {-b} / {2 * a} = {rStr}"); Steps.Add($"[Imaginary part of roots]\ti = sqrt(D) / 2a = {sqrD} / {2 * a} = {iStr}"); Steps.Add($"[Calculating first root]\tx0 = r - i = {rStr} - {iStr}i"); Steps.Add($"[Calculating second root]\tx1 = r + i = {rStr} + {iStr}i"); if (Regex.Match(rStr, @"\-.+\/\-.+").Success) { rStr = rStr.Replace("-", ""); } if (Regex.Match(iStr, @"\-.+\/\-.+").Success) { iStr = iStr.Replace("-", ""); } Roots.Add(rStr + " - " + iStr + "i"); Roots.Add(rStr + " + " + iStr + "i"); }