17.4.18 判断までの定義のまとめ

ここまでに出てきた,二次方程式の解の公式と,解の個数を調べる関数の定義をまとめると次のようになります.

(* 2次方程式 ax^2 + bx + c = 0 を解く *)

(* 自乗 *)
let square(x) = x *. x

(* 判別式 *)
let discriminant (a,b,c) = square(b) -. 4.0*.a*.c

(* 解の公式 *)
let quadratic1 (a,b,c) = (-.b +. sqrt(discriminant(a,b,c))) /. (2.0*.a) 
let quadratic2 (a,b,c) = (-.b -. sqrt(discriminant(a,b,c))) /. (2.0*.a) 

(* 微小な値 *)
let eps = 0.000001

(* 二根を持つ、解なし、重根を持つ条件 *)
let two_roots (a, b, c) = discriminant (a, b, c) > eps
let no_roots (a, b, c) = discriminant (a, b, c) < -.eps
let one_root (a, b, c) = 
  not (two_roots(a,b,c)) && not (no_roots(a,b,c)) 

(* 解の個数 *)
let number_of_roots(a,b,c) = 
  if no_roots(a,b,c) then 0 
  else (if one_root(a,b,c) then 1 
	 else 2)
filequadratic.ml