有人可以检查我的算术这个初学C程序吗?

时间:2011-10-11 00:13:55

标签: c math

我正在用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。

一直盯着代码,我没有看到错误。有人可以为我指出它吗?

5 个答案:

答案 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;