c# - 返回错误的二次公式

标签 c#

我正在编写一个程序,我正在使用二次公式。这是单击按钮时执行的代码,用于解决问题,

private void button1_Click(object sender, EventArgs e)
{
    double aVal, bVal, cVal, xVal1, xVal2;
    xVal1 = 0;
    xVal2 = 0;
    aVal = Convert.ToDouble(a.Text);
    bVal = Convert.ToDouble(b.Text);
    cVal = Convert.ToDouble(c.Text);
    xVal1 = (bVal + Math.Sqrt(Math.Pow(bVal, 2) - (4 * aVal * cVal))) / 2 * aVal; //Positive Calculation
    xVal2 = (bVal - Math.Sqrt(Math.Pow(bVal, 2) - (4 * aVal * cVal))) / 2 * aVal; //Negative Calculation
    xPos.Text = Convert.ToString(xVal1);
    xNeg.Text = Convert.ToString(xVal2);
}

经过一些调试后,我相信我已经将问题缩小到第 9 行和第 10 行,实际的数学计算就发生在这两个地方。但是,我不太确定出了什么问题。如您所见,数字是 double ,并且已初始化,因此它们不为空或截断。当我运行程序并输入 6、4 和 3 的 b 和 c 值时,负责输出负值和正值的 xPos 和 xNeg 标签仅显示 NaN。我应该为这类事情使用标签吗?

最佳答案

对于输入值 6、4 和 3,Math.Pow(bVal, 2) - (4 * aVal * cVal) 的结果是 -56 . 当您获得负数的 Sqrt 时,您会得到结果 NaN

您还需要使用正确的公式。你应该:

var sqrt = Math.Sqrt(Math.Pow(bVal, 2.0) - (4.0 * aVal * cVal));
var xVal1 = (-bVal + sqrt) / (2.0 * aVal); //Positive Calculation
var xVal2 = (-bVal - sqrt) / (2.0 * aVal); //Negative Calculation

注意第一个 bVal 前面的 -2 * aVal 周围的括号。

我还用 .0 表示常量,因为这会告诉编译器您正在使用 double 。如果不这样做,很容易得到不正确的结果。

关于c# - 返回错误的二次公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177353/

相关文章:

c# - 格式异常 C#

c# - XMLSerializer 并使用属性创建 XML 数组

c# - Windows Phone 7 下载图像并显示它

c# - 关于类的属性更改时如何使 UI 使用react的任何想法?

c# - ANTLR4 C# 运行时解析速度极慢

c# - WPF,兄弟选择像 jQuery?

c# - 替换和替换所有 c# windows 窗体

c# - 设置 ClassLibrary c# 中存在的 Windows 窗体的所有者

C# 文件在 using 语句后仍在使用

C# - 传递委托(delegate)参数并提取它