二次方程式を関数として以下のように実装する。
/* 二次方程式 */
int WH_Algebra__solveQuadraticEquation
(double tolerance,
double a, double b, double c,
double *OUT__x_0, double *OUT__x_1)
/*
入力引数:
tolerance は判別式に対するトレランス値
a は非ゼロのスカラーで、方程式の係数
b, c はスカラーで、方程式の係数
出力引数:
OUT__x_0, OUT__x_1 はスカラーで、解
もし、戻り値が2なら、双方とも有効
もし、戻り値が1なら、OUT__x_0のみ有効
もし、戻り値が0なら、どれも無効
戻り値:
実根の数を返す。
*/
{
double d = b * b - 4 * a * c;
if (fabs (d) < tolerance) {
*OUT__x_0 = - b / (2 * a);
return 1;
} else if (d < 0.0) {
return 0;
} else {
double q;
if (0.0 < b) {
q = -0.5 * (b + sqrt (d));
} else {
q = -0.5 * (b - sqrt (d));
}
*OUT__x_0 = q / a;
*OUT__x_1 = c / q;
return 2;
}
}