二次方程式 ax^2+bx+c=0 が解を2つ持つことの判断にtwo_rootsという名前を付けてみましょう。大小の判断も式の一種ですから、関数にすることができます。
# let two_roots (a, b, c) = discriminant (a, b, c) > eps;; val two_roots : float * float * float -> bool = <fun> # two_roots (1.,-5.,6.) ;; - : bool = true # two_roots (1.,2.,1.) ;; - : bool = false # two_roots(1.,2.,2.) ;; - : bool = false #
同様に解を1つも持たないことの判断にno_rootsという名前を付けます。
# let no_roots (a, b, c) = discriminant (a, b, c) < -.eps;; val no_roots : float * float * float -> bool = <fun> #
重解を持つ判断は、解を2つもたず、かつ、「解を1つも持たない」ことがない場合です。このような場合、条件を組み合わせてより複雑な条件を書き表わすことができます。この判断にone_rootという名前を付けて定義すると、次のように書くことができます。
# let one_root (a, b, c) = not (two_roots(a,b,c)) && not (no_roots(a,b,c)) ;; val two_roots : float * float * float -> bool = <fun> #
ちょっと複雑な式が出てきますが、not (式)は否定つまり「式でない」で、式1 && 式2は連言つまり「式1かつ式2」という意味だと知れば、それほど難しくはありませんね。つまり、
not (two_roots(a,b,c)) && not (no_roots(a,b,c))は「解を2つ持たない、かつ、解を1つか2つ持つ」つまり「解を1つ持つ」となるわけです。
ここで出てきた&&は-.や<などと同様に2つの式の値を使って計算をする記号(演算子)です。2つの式の選言、つまり「式1または式2」は||という記号を使って式1 || 式2と書くことができます。&&のかわりに||を使ってone_rootを定義することも可能で、その場合はnot (two_roots(a,b,c) || no_roots(a,b,c))のようになります。
17.4.15 解の個数の判断 | 17.4.16 条件の組み合わせ | 17.4.17 条件判断 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Thu, 05 May 2005 00:16:35 JST (1549d) |