我正在用C语言编写一个计算这个公式的程序:
formula http://www.crewtonramoneshouseofmath.com/images/quad_eq.gif 这是代码行(我只使用+而不是+ - ):
x = ((-1 * b) + (sqrt(pow(b, 2) - 4 * a * c)))/(4 * a);
我没有得到正确的根。例如,如果a = 1,b = -2,并且c = -2,那么它应该是2.73。相反,我得到1.37。
一直盯着代码,我没有看到错误。有人可以为我指出它吗?
答案 0 :(得分:13)
x = (...) / (4 * a)
这不应该是2 * a
吗?
答案 1 :(得分:1)
有趣的是1.37(你得到的)大约是2.73(你想要的)的一半,而且,看哪,它在你的分母中,除以4a
而不是{{1} }。
就个人而言,我会将该表达式写为:
2a
因为它与您尝试复制的等式更接近(x = (-b + sqrt (b * b - 4 * a * c)) / (2 * a);
更好地表示为-1 * b
),我发现调用-b
得到一个简单的正方形是不必要的其中pow
在没有函数调用的情况下执行相同的工作。
答案 2 :(得分:0)
x1 =(( - 1 * bcoeff)+(sqrt(pow(bcoeff,2) - 4 * acoeff * ccoeff)))/( 2 * acoeff);
答案 3 :(得分:0)
点击此处:.../(4 * acoeff)
答案 4 :(得分:0)
虽然这个问题已经得到解答,但您的错误仍然存在。我只想提一下,将问题分解为更多行会增加其可读性并可能减少错误。
float den = 2 * a;
float num1 = (-1 * b);
float num2 = pow(b ,2) - (4 * a * c);
float x = (num1 + sqrt(num2))/ den;