Next: , Previous: , Up: Numbers   [Contents][Index]


3.4 Comparison of Numbers

数が数値的に等しいかテストするためには、eqではなく、通常は=を使用するべきです。同じ数値をもつ、多くの浮動小数オブジェクトが存在するかもしれません。これらを比較するのにeqを使用する場合、これは2つの値が同じオブジェクトかどうかをテストすることになります。対照的に、=はオブジェクトの数値的な値だけを比較します。

Emacs Lispでは、それぞれの整数はは、一意なLispオブジェクトです。したがって、整数に関しては、eq=と同じです。未知の整数の値を比較するのに、eqを使用するのが便利な場合があります。なぜなら未知の値が数字でない場合でも、eqはエラーを報告しません。対照的に、引数が数でもマーカーでもない場合、=はエラーをシグナルします。しかし、整数の比較においてさえ、使用できる場合は=を使用するのが、よいプログラミング習慣です。

数の比較において、2つの数が同じデータ型(どちらも整数、またはどちらも浮動小数)で、同じ値の場合は等しい数として扱う、equalのほうが便利なときもあります。対照的に、=は、整数と浮動小数点数を等しい数と扱うことができます。Equality Predicatesを参照してください。

他の欠点もあります。浮動小数演算は正確ではないので、浮動小数値を比較するのが悪いアイデアのときが、しばしばあります。通常は、近似的に等しいことをテストするほうがよいでしょう。以下はこれを行なう関数です:

(defvar fuzz-factor 1.0e-6)
(defun approx-equal (x y)
  (or (= x y)
      (< (/ (abs (- x y))
            (max (abs x) (abs y)))
         fuzz-factor)))

Common Lispに関する注意: Common Lispは複数ワード整数を実装していて、2つの別の整数オブジェクトが、同じ数値的な値をもつことができるので、Common Lispでの数の比較は、常に=が要求されます。Emacs Lispの整数は範囲が制限されているため、与えられた値に対応する整数オブジェクトは、1つだけです。

Function: = number-or-marker &rest number-or-markers

この関数は、すべての引数が数値的に等しいかどうかをテストして、もしそうならt、それ以外はnilをreturnします。

Function: eql value1 value2

この関数はeqと同様に振る舞いますが、引数が両方とも数のときは例外です。これは数を型と数値的な値により比較するので、(eql 1.0 1)nilをreturnしますが、(eql 1.0 1.0)(eql 1 1)tをreturnします。

Function: /= number-or-marker1 number-or-marker2

この関数は引数が数値的に等しいかどうかをテストして、もし異なる場合はt、等しい場合はnilをreturnします。

Function: < number-or-marker &rest number-or-markers

この関数は、各引数がそれぞれ、その後の引数より小さいかどうかをテストして、もしそうならt、それ以外はnilをreturnします。

Function: <= number-or-marker &rest number-or-markers

この関数は、各引数がそれぞれ、その後の引数以下かどうかをテストして、もしそうならt、それ以外はnilをreturnします。

Function: > number-or-marker &rest number-or-markers

この関数は、各引数がそれぞれ、その後の引数より大きいかどうかをテストして、もしそうならt、それ以外はnilをreturnします。

Function: >= number-or-marker &rest number-or-markers

この関数は、各引数がそれぞれ、その後の引数以上かどうかをテストして、もしそうならt、それ以外はnilをreturnします。

Function: max number-or-marker &rest numbers-or-markers

この関数は引数の最大をreturnします。引数のどれかが浮動小数の場合は、たとえ最大が整数であっても、浮動小数として値がreturnされます。

(max 20)
     ⇒ 20
(max 1 2.5)
     ⇒ 2.5
(max 1 3 2.5)
     ⇒ 3.0
Function: min number-or-marker &rest numbers-or-markers

この関数は引数の最小をreturnします。引数のどれかが浮動小数の場合は、たとえ最小が整数であっても、浮動小数として値がreturnされます。

(min -4 1)
     ⇒ -4
Function: abs number

この関数はnumberの絶対値をreturnします。