1
這site解決了三次方程,並擁有它採用C++:解決三次方程
我寫了這個函數來得到相同的結果的公式,但它不工作
void cubicFormula(float a, float b, float c, float d, float *results)
{
float a2 = a*a;
float b2 = b*b;
float b3 = b2*b;
float q = (3*c- b2)/9;
float q2 = q*q;
float q3 = q2*q;
float r = -27*d + b*(9*c-2*b2);
float r2 = r*r;
float discriminant = q3 + r2;
float s = r + sqrtf(discriminant);
float t = r - sqrtf(discriminant);
float term1 = powf((-t + s)/2, 1/3.);
float r13= 2 * sqrtf(q);
results[0] = (- term1 + r13 * cosf(q3/3));
results[1] = (- term1 + r13 * cosf(q3 + (2*M_PI)/3));
results[2] = (- term1 + r13 * cosf(q3 + (4*M_PI)/3));
}
可能是什麼問題,有什麼我失蹤?
更新:
例如,使用這些值
a = -1.000000;
b = 36.719475;
c = -334.239960;
d = 629.877808;
判別是小於零,所以R13是楠
但是上面提到的位點和我測試過的幾個在線求解器找到三個根
23.775687816485593
2.548516232734247
10.395270950780164
所有這些實數
你用的是什麼'a','b','c'和'd'?並非所有的三次方程都有三個真正的根。 – Tim
「但它不起作用」 - 在沒有心理能力的情況下,請描述它如何不起作用。 –
平方根可能是虛數,您需要在調用sqrt函數之前考慮這一點。閱讀複雜的數字。 – hyde