三次方程式を関数として以下のように実装する。
/* 三次方程式 */ int WH_Algebra__solveCubicEquation (double tolerance, double a, double b, double c, double *OUT__x_0, double *OUT__x_1, double *OUT__x_2) /* 入力引数: tolerance は判別式に対するトレランス値 a, b, c はスカラーで、方程式の係数 出力引数: OUT__x_0, OUT__x_1, OUT__x_2 はスカラーで、解 もし、戻り値が3なら、3つとも有効 もし、戻り値が1なら、OUT__x_0のみ有効 戻り値: 実根の数を返す。 */ { double Q = (a * a - 3 * b) / 9; double R = ( 2 * a * a * a - 9 * a * b + 27 * c) / 54; double d = Q * Q * Q - R * R; if (fabs (d) < tolerance) { d = 0.0; } if (d < 0.0) { double e = pow (sqrt (-d) + fabs (R), 1.0 / 3); if (0.0 < R) { *OUT__x_0 = -(e + Q / e) - a / 3; } else { *OUT__x_0 = (e + Q / e) - a / 3; } return 1; } else { double theta = acos (R / sqrt (Q * Q * Q)); *OUT__x_0 = -2 * sqrt (Q) * cos (theta / 3) - a / 3; *OUT__x_1 = -2 * sqrt (Q) * cos ((theta + 2 * M_PI) / 3) - a / 3; *OUT__x_2 = -2 * sqrt (Q) * cos ((theta + 4 * M_PI) / 3) - a / 3; return 3; } }