Next:

Comparison of Numbers ===================== Floating point numbers in Emacs Lisp actually take up storage, and there can be many distinct floating point number objects with the same numeric value. If you use `eq' to compare them, then you test whether two values are the same *object*. If you want to compare just the numeric values, use `='. If you use `eq' to compare two integers, it always returns `t' if they have the same value. This is sometimes useful, because `eq' accepts arguments of any type and never causes an error, whereas `=' signals an error if the arguments are not numbers or markers. However, it is a good idea to use `=' if you can, even for comparing integers, just in case we change the representation of integers in a future Emacs version. There is another wrinkle: because floating point arithmetic is not exact, it is often a bad idea to check for equality of two floating point values. Usually it is better to test for approximate equality. Here's a function to do this: (defvar fuzz-factor 1.0e-6) (defun approx-equal (x y) (< (/ (abs (- x y)) (max (abs x) (abs y))) fuzz-factor)) Common Lisp note: because of the way numbers are implemented in Common Lisp, you generally need to use ``='' to test for equality between numbers of any kind. - Function: = NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its arguments are the same number, and returns `t' if so, `nil' otherwise. - Function: /= NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its arguments are not the same number, and returns `t' if so, `nil' otherwise. - Function: < NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its first argument is strictly less than its second argument. It returns `t' if so, `nil' otherwise. - Function: <= NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its first argument is less than or equal to its second argument. It returns `t' if so, `nil' otherwise. - Function: > NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its first argument is strictly greater than its second argument. It returns `t' if so, `nil' otherwise. - Function: >= NUMBER-OR-MARKER1 NUMBER-OR-MARKER2 This function tests whether its first argument is greater than or equal to its second argument. It returns `t' if so, `nil' otherwise. - Function: max NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS This function returns the largest of its arguments. (max 20) => 20 (max 1 2) => 2 (max 1 3 2) => 3 - Function: min NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS This function returns the smallest of its arguments.