next up previous contents
: 三次方程式 : 二次方程式 : 二次方程式   目次

実装

二次方程式を関数として以下のように実装する。

/* 二次方程式 */
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;
  }
}



Hiroshi KAWAI 平成15年8月11日