我构建了一个非常简单但功能齐全且非常有用的 WinForms C# 应用程序,它可以求解二次方程的实数根。
这是我当前的编程逻辑:
string noDivideByZero = "Enter an a value that isn't 0";
txtSolution1.Text = noDivideByZero;
txtSolution2.Text = noDivideByZero;
decimal aValue = nmcA.Value;
decimal bValue = nmcB.Value;
decimal cValue = nmcC.Value;
decimal solution1, solution2;
string solution1String, solution2String;
//Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a
//Calculate discriminant
decimal insideSquareRoot = (bValue * bValue) - 4 * aValue * cValue;
if (insideSquareRoot < 0)
{
//No real solution
solution1String = "No real solutions!";
solution2String = "No real solutions!";
txtSolution1.Text = solution1String;
txtSolution2.Text = solution2String;
}
else if (insideSquareRoot == 0)
{
//One real solution
decimal sqrtOneSolution = (decimal)Math.Sqrt((double)insideSquareRoot);
solution1 = (-bValue + sqrtOneSolution) / (2 * aValue);
solution2String = "No real solution!";
txtSolution1.Text = solution1.ToString();
txtSolution2.Text = solution2String;
}
else if (insideSquareRoot > 0)
{
//Two real solutions
decimal sqrtTwoSolutions = (decimal)Math.Sqrt((double)insideSquareRoot);
solution1 = (-bValue + sqrtTwoSolutions) / (2 * aValue);
solution2 = (-bValue - sqrtTwoSolutions) / (2 * aValue);
txtSolution1.Text = solution1.ToString();
txtSolution2.Text = solution2.ToString();
}
txtSolution1
和txtSolution2
是不允许接收输入但输出计算结果的文本框
nmcA
,nmcB
并且nmcC
是 NumericUpDown 控件,用于最终用户输入的 a、b 和 c 值
好的,所以,我希望更进一步,并可能解决虚值。考虑到我已经设置了条件,只有当判别式等于0
或小于时,我才需要考虑虚值0
。
但是,我想不出解决这个问题的好方法。当人们试图取负数的平方根时,就会出现复杂的解决方案,导致i
s 出现在任何地方。 i = sqroot(-1)
和i^2 = -1
。
有谁知道如何解决这个问题,或者如果它只是不值得花时间?
编辑
通过更多的谷歌搜索,我发现 C# 4.0(或 .NET 4.0,我不确定是哪个)有可能在System.Numerics.Complex
. 我现在正在检查这个。