# HG changeset patch # User Richard M. Stallman # Date 1108376376 0 # Node ID d262f544d0bff8e7b19889a40abe6fff1300831f # Parent 114da1fc3775a539058bb462c6329d4ec87cd5ee (Integer Basics): Clarify radix explanation. (Predicates on Numbers): Minor clarification. (Comparison of Numbers): Minor clarification. Clarify eql. Typos in min, max. (Math Functions): Clarify overflow in expt. diff -r 114da1fc3775 -r d262f544d0bf lispref/numbers.texi --- a/lispref/numbers.texi Mon Feb 14 10:17:32 2005 +0000 +++ b/lispref/numbers.texi Mon Feb 14 10:19:36 2005 +0000 @@ -73,14 +73,21 @@ @cindex hex numbers @cindex octal numbers @cindex reading numbers in hex, octal, and binary - In addition, the Lisp reader recognizes a syntax for integers in -bases other than 10: @samp{#B@var{integer}} reads @var{integer} in -binary (radix 2), @samp{#O@var{integer}} reads @var{integer} in octal -(radix 8), @samp{#X@var{integer}} reads @var{integer} in hexadecimal -(radix 16), and @samp{#@var{radix}r@var{integer}} reads @var{integer} -in radix @var{radix} (where @var{radix} is between 2 and 36, -inclusively). Case is not significant for the letter after @samp{#} -(@samp{B}, @samp{O}, etc.) that denotes the radix. + The syntax for integers in bases other than 10 uses @samp{#} +followed by a letter that specifies the radix: @samp{b} for binary, +@samp{o} for octal, @samp{x} for hex, or @samp{@var{radix}r} to +specify radix @var{radix}. Case is not significant for the letter +that specifies the radix. Thus, @samp{#b@var{integer}} reads +@var{integer} in binary, and @samp{#@var{radix}r@var{integer}} reads +@var{integer} in radix @var{radix}. Allowed values of @var{radix} run +from 2 to 36. For example: + +@example +#b101100 @result{} 44 +#o54 @result{} 44 +#x2c @result{} 44 +#24r1k @result{} 44 +@end example To understand how various functions work on integers, especially the bitwise operators (@pxref{Bitwise Operations}), it is often helpful to @@ -211,13 +218,12 @@ @node Predicates on Numbers @section Type Predicates for Numbers - The functions in this section test whether the argument is a number or -whether it is a certain sort of number. The functions @code{integerp} -and @code{floatp} can take any type of Lisp object as argument (the -predicates would not be of much use otherwise); but the @code{zerop} -predicate requires a number as its argument. See also -@code{integer-or-marker-p} and @code{number-or-marker-p}, in -@ref{Predicates on Markers}. + The functions in this section test for numbers, or for a specific +type of number. The functions @code{integerp} and @code{floatp} can +take any type of Lisp object as argument (they would not be of much +use otherwise), but the @code{zerop} predicate requires a number as +its argument. See also @code{integer-or-marker-p} and +@code{number-or-marker-p}, in @ref{Predicates on Markers}. @defun floatp object This predicate tests whether its argument is a floating point @@ -251,7 +257,7 @@ This predicate tests whether its argument is zero, and returns @code{t} if so, @code{nil} otherwise. The argument must be a number. -These two forms are equivalent: @code{(zerop x)} @equiv{} @code{(= x 0)}. +@code{(zerop x)} is equivalent to @code{(= x 0)}. @end defun @node Comparison of Numbers @@ -275,10 +281,11 @@ can, even for comparing integers, just in case we change the representation of integers in a future Emacs version. - Sometimes it is useful to compare numbers with @code{equal}; it treats -two numbers as equal if they have the same data type (both integers, or -both floating point) and the same value. By contrast, @code{=} can -treat an integer and a floating point number as equal. + Sometimes it is useful to compare numbers with @code{equal}; it +treats two numbers as equal if they have the same data type (both +integers, or both floating point) and the same value. By contrast, +@code{=} can treat an integer and a floating point number as equal. +@xref{Equality Predicates}. There is another wrinkle: because floating point arithmetic is not exact, it is often a bad idea to check for equality of two floating @@ -309,10 +316,10 @@ @end defun @defun eql value1 value2 -This function compares two floating point numbers like @code{=}, and -compares two integers like @code{=}, and acts like @code{eq} in all -other cases. Thus, @code{(eql 1.0 1)} returns @code{nil}, but -@code{(eql 1.0 1.0)} and @code{(eql 1 1)} both return @code{t}. +This function acts like @code{eq} except when both arguments are +numbers. It compares numbers by type and numberic value, so that +@code{(eql 1.0 1)} returns @code{nil}, but @code{(eql 1.0 1.0)} and +@code{(eql 1 1)} both return @code{t}. @end defun @defun /= number-or-marker1 number-or-marker2 @@ -345,7 +352,7 @@ @defun max number-or-marker &rest numbers-or-markers This function returns the largest of its arguments. -If any of the argument is floating-point, the value is returned +If any of the arguments is floating-point, the value is returned as floating point, even if it was given as an integer. @example @@ -360,7 +367,7 @@ @defun min number-or-marker &rest numbers-or-markers This function returns the smallest of its arguments. -If any of the argument is floating-point, the value is returned +If any of the arguments is floating-point, the value is returned as floating point, even if it was given as an integer. @example @@ -1147,8 +1154,7 @@ @defun expt x y This function returns @var{x} raised to power @var{y}. If both arguments are integers and @var{y} is positive, the result is an -integer; in this case, it is truncated to fit the range of possible -integer values. +integer; in this case, overflow causes truncation, so watch out. @end defun @defun sqrt arg