C# C语言中的二次方程求解器#
我正试图用C#编写一个简单的二次方程求解器,但由于某些原因,它并没有给出正确的答案。事实上,它给了我非常大的数字作为答案,通常是数百万 谁能给我点启示吗?对于正根和负根,我得到了完全相同的答案。(尝试了两种不同的数学方法)C# C语言中的二次方程求解器#,c#,C#,我正试图用C#编写一个简单的二次方程求解器,但由于某些原因,它并没有给出正确的答案。事实上,它给了我非常大的数字作为答案,通常是数百万 谁能给我点启示吗?对于正根和负根,我得到了完全相同的答案。(尝试了两种不同的数学方法) 请尝试此版本的quadForm: static double quadForm(int a, int b, int c, bool pos) { var preRoot = b * b - 4 * a * c; if (preRoot < 0)
请尝试此版本的
quadForm
:
static double quadForm(int a, int b, int c, bool pos)
{
var preRoot = b * b - 4 * a * c;
if (preRoot < 0)
{
return double.NaN;
}
else
{
var sgn = pos ? 1.0 : -1.0;
return (sgn * Math.Sqrt(preRoot) - b) / (2.0 * a);
}
}
静态双四元格式(整数a、整数b、整数c、布尔位置)
{
var preRoot=b*b-4*a*c;
if(预根<0)
{
返回double.NaN;
}
其他的
{
var sgn=位置1.0:-1.0;
返回(sgn*数学Sqrt(预根)-b)/(2.0*a);
}
}
你给了它什么样的输入?@Asad我分别为a、b、c尝试了1、2、3,得到了。。。1073741823roots@user3924098,你知道你的a,b,c等于1,2,3时,(b*b)-(4*a*c)
的结果是什么吗?@user3924098,你能告诉我-8
的平方根是多少吗?或者更具体地说,Math.Sqrt(-8)
的返回值是多少?不要将Sqrt
的结果强制转换为整数。仅仅因为系数是整数,并不意味着根是整数。教科书版的二次公式有潜在的问题,精度严重下降。建议使用以下命令:@dbc-在“严重”和“显著”之间有区别。这也只影响两个相对接近的数字相减的情况。这通常不是一个问题。因此,除非该代码需要工程精度,否则它不应该是一个问题。
static double quadForm(int a, int b, int c, bool pos)
{
var preRoot = b * b - 4 * a * c;
if (preRoot < 0)
{
return double.NaN;
}
else
{
var sgn = pos ? 1.0 : -1.0;
return (sgn * Math.Sqrt(preRoot) - b) / (2.0 * a);
}
}