fix bad page breaks
[bpt/emacs.git] / lispref / numbers.texi
CommitLineData
e6512bcf
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
651f374c 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
ceb4c4d3 4@c 2004, 2005, 2006 Free Software Foundation, Inc.
e6512bcf
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/numbers
05fd2b65 7@node Numbers, Strings and Characters, Lisp Data Types, Top
e6512bcf
RS
8@chapter Numbers
9@cindex integers
10@cindex numbers
11
12 GNU Emacs supports two numeric data types: @dfn{integers} and
13@dfn{floating point numbers}. Integers are whole numbers such as
14@minus{}3, 0, 7, 13, and 511. Their values are exact. Floating point
15numbers are numbers with fractional parts, such as @minus{}4.5, 0.0, or
969fe9b5
RS
162.71828. They can also be expressed in exponential notation: 1.5e2
17equals 150; in this example, @samp{e2} stands for ten to the second
18power, and that is multiplied by 1.5. Floating point values are not
e6512bcf
RS
19exact; they have a fixed, limited amount of precision.
20
e6512bcf
RS
21@menu
22* Integer Basics:: Representation and range of integers.
23* Float Basics:: Representation and range of floating point.
24* Predicates on Numbers:: Testing for numbers.
25* Comparison of Numbers:: Equality and inequality predicates.
26* Numeric Conversions:: Converting float to integer and vice versa.
27* Arithmetic Operations:: How to add, subtract, multiply and divide.
28* Rounding Operations:: Explicitly rounding floating point numbers.
29* Bitwise Operations:: Logical and, or, not, shifting.
4ac771a0 30* Math Functions:: Trig, exponential and logarithmic functions.
e6512bcf
RS
31* Random Numbers:: Obtaining random integers, predictable or not.
32@end menu
33
34@node Integer Basics
35@comment node-name, next, previous, up
36@section Integer Basics
37
38 The range of values for an integer depends on the machine. The
e1e44180 39minimum range is @minus{}268435456 to 268435455 (29 bits; i.e.,
37680279 40@ifnottex
e1e44180 41-2**28
37680279 42@end ifnottex
177c0ea7 43@tex
e1e44180 44@math{-2^{28}}
e6512bcf 45@end tex
177c0ea7 46to
37680279 47@ifnottex
e1e44180 482**28 - 1),
37680279 49@end ifnottex
177c0ea7 50@tex
e1e44180 51@math{2^{28}-1}),
e6512bcf 52@end tex
94b00316 53but some machines may provide a wider range. Many examples in this
e1e44180 54chapter assume an integer has 29 bits.
e6512bcf
RS
55@cindex overflow
56
57 The Lisp reader reads an integer as a sequence of digits with optional
58initial sign and optional final period.
59
60@example
61 1 ; @r{The integer 1.}
62 1. ; @r{The integer 1.}
63+1 ; @r{Also the integer 1.}
64-1 ; @r{The integer @minus{}1.}
b98ace27 65 536870913 ; @r{Also the integer 1, due to overflow.}
e6512bcf
RS
66 0 ; @r{The integer 0.}
67-0 ; @r{The integer 0.}
68@end example
69
d9940cbf
EZ
70@cindex integers in specific radix
71@cindex radix for reading an integer
72@cindex base for reading an integer
75c65b20
EZ
73@cindex hex numbers
74@cindex octal numbers
75@cindex reading numbers in hex, octal, and binary
4182ecfc
RS
76 The syntax for integers in bases other than 10 uses @samp{#}
77followed by a letter that specifies the radix: @samp{b} for binary,
78@samp{o} for octal, @samp{x} for hex, or @samp{@var{radix}r} to
79specify radix @var{radix}. Case is not significant for the letter
80that specifies the radix. Thus, @samp{#b@var{integer}} reads
81@var{integer} in binary, and @samp{#@var{radix}r@var{integer}} reads
82@var{integer} in radix @var{radix}. Allowed values of @var{radix} run
83from 2 to 36. For example:
84
85@example
86#b101100 @result{} 44
87#o54 @result{} 44
88#x2c @result{} 44
89#24r1k @result{} 44
90@end example
d9940cbf 91
e6512bcf
RS
92 To understand how various functions work on integers, especially the
93bitwise operators (@pxref{Bitwise Operations}), it is often helpful to
94view the numbers in their binary form.
95
e1e44180 96 In 29-bit binary, the decimal integer 5 looks like this:
e6512bcf
RS
97
98@example
e1e44180 990 0000 0000 0000 0000 0000 0000 0101
e6512bcf
RS
100@end example
101
102@noindent
103(We have inserted spaces between groups of 4 bits, and two spaces
104between groups of 8 bits, to make the binary integer easier to read.)
105
106 The integer @minus{}1 looks like this:
107
108@example
e1e44180 1091 1111 1111 1111 1111 1111 1111 1111
e6512bcf
RS
110@end example
111
112@noindent
113@cindex two's complement
e1e44180 114@minus{}1 is represented as 29 ones. (This is called @dfn{two's
e6512bcf
RS
115complement} notation.)
116
117 The negative integer, @minus{}5, is creating by subtracting 4 from
118@minus{}1. In binary, the decimal integer 4 is 100. Consequently,
119@minus{}5 looks like this:
120
121@example
e1e44180 1221 1111 1111 1111 1111 1111 1111 1011
e6512bcf
RS
123@end example
124
e1e44180
SM
125 In this implementation, the largest 29-bit binary integer value is
126268,435,455 in decimal. In binary, it looks like this:
e6512bcf
RS
127
128@example
e1e44180 1290 1111 1111 1111 1111 1111 1111 1111
e6512bcf
RS
130@end example
131
132 Since the arithmetic functions do not check whether integers go
e1e44180
SM
133outside their range, when you add 1 to 268,435,455, the value is the
134negative integer @minus{}268,435,456:
e6512bcf
RS
135
136@example
e1e44180
SM
137(+ 1 268435455)
138 @result{} -268435456
139 @result{} 1 0000 0000 0000 0000 0000 0000 0000
e6512bcf
RS
140@end example
141
f9f59935
RS
142 Many of the functions described in this chapter accept markers for
143arguments in place of numbers. (@xref{Markers}.) Since the actual
144arguments to such functions may be either numbers or markers, we often
145give these arguments the name @var{number-or-marker}. When the argument
e6512bcf
RS
146value is a marker, its position value is used and its buffer is ignored.
147
24fc2020
RS
148@defvar most-positive-fixnum
149The value of this variable is the largest integer that Emacs Lisp
150can handle.
151@end defvar
152
153@defvar most-negative-fixnum
154The value of this variable is the smallest integer that Emacs Lisp can
155handle. It is negative.
156@end defvar
157
e6512bcf
RS
158@node Float Basics
159@section Floating Point Basics
160
f9f59935
RS
161 Floating point numbers are useful for representing numbers that are
162not integral. The precise range of floating point numbers is
163machine-specific; it is the same as the range of the C data type
164@code{double} on the machine you are using.
e6512bcf 165
f9f59935
RS
166 The read-syntax for floating point numbers requires either a decimal
167point (with at least one digit following), an exponent, or both. For
168example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2}, @samp{1.5e3}, and
169@samp{.15e4} are five ways of writing a floating point number whose
170value is 1500. They are all equivalent. You can also use a minus sign
171to write negative floating point numbers, as in @samp{-1.0}.
e6512bcf 172
ad800164 173@cindex @acronym{IEEE} floating point
e6512bcf
RS
174@cindex positive infinity
175@cindex negative infinity
176@cindex infinity
177@cindex NaN
fa091c04
LT
178 Most modern computers support the @acronym{IEEE} floating point standard,
179which provides for positive infinity and negative infinity as floating point
05fd2b65
RS
180values. It also provides for a class of values called NaN or
181``not-a-number''; numerical functions return such values in cases where
903a1a91 182there is no correct answer. For example, @code{(/ 0.0 0.0)} returns a
05fd2b65
RS
183NaN. For practical purposes, there's no significant difference between
184different NaN values in Emacs Lisp, and there's no rule for precisely
969fe9b5 185which NaN value should be used in a particular case, so Emacs Lisp
32d4834c
RS
186doesn't try to distinguish them (but it does report the sign, if you
187print it). Here are the read syntaxes for these special floating
188point values:
f9f59935
RS
189
190@table @asis
191@item positive infinity
192@samp{1.0e+INF}
193@item negative infinity
194@samp{-1.0e+INF}
32d4834c
RS
195@item Not-a-number
196@samp{0.0e+NaN} or @samp{-0.0e+NaN}.
f9f59935 197@end table
e6512bcf 198
32d4834c
RS
199 To test whether a floating point value is a NaN, compare it with
200itself using @code{=}. That returns @code{nil} for a NaN, and
201@code{t} for any other floating point value.
202
203 The value @code{-0.0} is distinguishable from ordinary zero in
204@acronym{IEEE} floating point, but Emacs Lisp @code{equal} and
205@code{=} consider them equal values.
969fe9b5 206
e6512bcf
RS
207 You can use @code{logb} to extract the binary exponent of a floating
208point number (or estimate the logarithm of an integer):
209
210@defun logb number
211This function returns the binary exponent of @var{number}. More
212precisely, the value is the logarithm of @var{number} base 2, rounded
213down to an integer.
f9f59935
RS
214
215@example
216(logb 10)
217 @result{} 3
218(logb 10.0e20)
219 @result{} 69
220@end example
e6512bcf
RS
221@end defun
222
223@node Predicates on Numbers
224@section Type Predicates for Numbers
225
4182ecfc
RS
226 The functions in this section test for numbers, or for a specific
227type of number. The functions @code{integerp} and @code{floatp} can
228take any type of Lisp object as argument (they would not be of much
229use otherwise), but the @code{zerop} predicate requires a number as
230its argument. See also @code{integer-or-marker-p} and
231@code{number-or-marker-p}, in @ref{Predicates on Markers}.
e6512bcf
RS
232
233@defun floatp object
234This predicate tests whether its argument is a floating point
235number and returns @code{t} if so, @code{nil} otherwise.
236
237@code{floatp} does not exist in Emacs versions 18 and earlier.
238@end defun
239
240@defun integerp object
241This predicate tests whether its argument is an integer, and returns
242@code{t} if so, @code{nil} otherwise.
243@end defun
244
245@defun numberp object
246This predicate tests whether its argument is a number (either integer or
247floating point), and returns @code{t} if so, @code{nil} otherwise.
248@end defun
249
05fd2b65 250@defun wholenump object
e6512bcf 251@cindex natural numbers
05fd2b65
RS
252The @code{wholenump} predicate (whose name comes from the phrase
253``whole-number-p'') tests to see whether its argument is a nonnegative
e6512bcf
RS
254integer, and returns @code{t} if so, @code{nil} otherwise. 0 is
255considered non-negative.
256
05fd2b65
RS
257@findex natnump
258@code{natnump} is an obsolete synonym for @code{wholenump}.
e6512bcf
RS
259@end defun
260
261@defun zerop number
262This predicate tests whether its argument is zero, and returns @code{t}
263if so, @code{nil} otherwise. The argument must be a number.
264
4182ecfc 265@code{(zerop x)} is equivalent to @code{(= x 0)}.
e6512bcf
RS
266@end defun
267
268@node Comparison of Numbers
269@section Comparison of Numbers
270@cindex number equality
271
05fd2b65
RS
272 To test numbers for numerical equality, you should normally use
273@code{=}, not @code{eq}. There can be many distinct floating point
274number objects with the same numeric value. If you use @code{eq} to
275compare them, then you test whether two values are the same
276@emph{object}. By contrast, @code{=} compares only the numeric values
277of the objects.
278
279 At present, each integer value has a unique Lisp object in Emacs Lisp.
f9f59935 280Therefore, @code{eq} is equivalent to @code{=} where integers are
05fd2b65
RS
281concerned. It is sometimes convenient to use @code{eq} for comparing an
282unknown value with an integer, because @code{eq} does not report an
283error if the unknown value is not a number---it accepts arguments of any
284type. By contrast, @code{=} signals an error if the arguments are not
285numbers or markers. However, it is a good idea to use @code{=} if you
286can, even for comparing integers, just in case we change the
287representation of integers in a future Emacs version.
e6512bcf 288
4182ecfc
RS
289 Sometimes it is useful to compare numbers with @code{equal}; it
290treats two numbers as equal if they have the same data type (both
291integers, or both floating point) and the same value. By contrast,
292@code{=} can treat an integer and a floating point number as equal.
293@xref{Equality Predicates}.
a9f0a989 294
e6512bcf
RS
295 There is another wrinkle: because floating point arithmetic is not
296exact, it is often a bad idea to check for equality of two floating
297point values. Usually it is better to test for approximate equality.
298Here's a function to do this:
299
300@example
301(defvar fuzz-factor 1.0e-6)
302(defun approx-equal (x y)
bfe721d1
KH
303 (or (and (= x 0) (= y 0))
304 (< (/ (abs (- x y))
305 (max (abs x) (abs y)))
306 fuzz-factor)))
e6512bcf
RS
307@end example
308
309@cindex CL note---integers vrs @code{eq}
310@quotation
05fd2b65 311@b{Common Lisp note:} Comparing numbers in Common Lisp always requires
e6512bcf
RS
312@code{=} because Common Lisp implements multi-word integers, and two
313distinct integer objects can have the same numeric value. Emacs Lisp
314can have just one integer object for any given value because it has a
315limited range of integer values.
316@end quotation
317
318@defun = number-or-marker1 number-or-marker2
319This function tests whether its arguments are numerically equal, and
320returns @code{t} if so, @code{nil} otherwise.
321@end defun
322
5e859db9 323@defun eql value1 value2
4182ecfc 324This function acts like @code{eq} except when both arguments are
5a36d834 325numbers. It compares numbers by type and numeric value, so that
4182ecfc
RS
326@code{(eql 1.0 1)} returns @code{nil}, but @code{(eql 1.0 1.0)} and
327@code{(eql 1 1)} both return @code{t}.
5e859db9
RS
328@end defun
329
e6512bcf
RS
330@defun /= number-or-marker1 number-or-marker2
331This function tests whether its arguments are numerically equal, and
332returns @code{t} if they are not, and @code{nil} if they are.
333@end defun
334
335@defun < number-or-marker1 number-or-marker2
336This function tests whether its first argument is strictly less than
337its second argument. It returns @code{t} if so, @code{nil} otherwise.
338@end defun
339
340@defun <= number-or-marker1 number-or-marker2
341This function tests whether its first argument is less than or equal
342to its second argument. It returns @code{t} if so, @code{nil}
343otherwise.
344@end defun
345
346@defun > number-or-marker1 number-or-marker2
347This function tests whether its first argument is strictly greater
348than its second argument. It returns @code{t} if so, @code{nil}
349otherwise.
350@end defun
351
352@defun >= number-or-marker1 number-or-marker2
353This function tests whether its first argument is greater than or
354equal to its second argument. It returns @code{t} if so, @code{nil}
355otherwise.
356@end defun
357
358@defun max number-or-marker &rest numbers-or-markers
359This function returns the largest of its arguments.
4182ecfc 360If any of the arguments is floating-point, the value is returned
8241495d 361as floating point, even if it was given as an integer.
e6512bcf
RS
362
363@example
364(max 20)
365 @result{} 20
366(max 1 2.5)
367 @result{} 2.5
368(max 1 3 2.5)
8241495d 369 @result{} 3.0
e6512bcf
RS
370@end example
371@end defun
372
373@defun min number-or-marker &rest numbers-or-markers
374This function returns the smallest of its arguments.
4182ecfc 375If any of the arguments is floating-point, the value is returned
8241495d 376as floating point, even if it was given as an integer.
e6512bcf
RS
377
378@example
379(min -4 1)
380 @result{} -4
381@end example
382@end defun
383
969fe9b5 384@defun abs number
a9f0a989 385This function returns the absolute value of @var{number}.
969fe9b5
RS
386@end defun
387
e6512bcf
RS
388@node Numeric Conversions
389@section Numeric Conversions
390@cindex rounding in conversions
391
392To convert an integer to floating point, use the function @code{float}.
393
394@defun float number
395This returns @var{number} converted to floating point.
396If @var{number} is already a floating point number, @code{float} returns
397it unchanged.
398@end defun
399
400There are four functions to convert floating point numbers to integers;
fa091c04
LT
401they differ in how they round. All accept an argument @var{number}
402and an optional argument @var{divisor}. Both arguments may be
403integers or floating point numbers. @var{divisor} may also be
404@code{nil}. If @var{divisor} is @code{nil} or omitted, these
405functions convert @var{number} to an integer, or return it unchanged
406if it already is an integer. If @var{divisor} is non-@code{nil}, they
407divide @var{number} by @var{divisor} and convert the result to an
408integer. An @code{arith-error} results if @var{divisor} is 0.
409
410@defun truncate number &optional divisor
e6512bcf
RS
411This returns @var{number}, converted to an integer by rounding towards
412zero.
b7a2fc9b
RS
413
414@example
415(truncate 1.2)
416 @result{} 1
417(truncate 1.7)
418 @result{} 1
419(truncate -1.2)
420 @result{} -1
421(truncate -1.7)
422 @result{} -1
423@end example
e6512bcf
RS
424@end defun
425
426@defun floor number &optional divisor
427This returns @var{number}, converted to an integer by rounding downward
428(towards negative infinity).
429
fa091c04
LT
430If @var{divisor} is specified, this uses the kind of division
431operation that corresponds to @code{mod}, rounding downward.
b7a2fc9b
RS
432
433@example
434(floor 1.2)
435 @result{} 1
436(floor 1.7)
437 @result{} 1
438(floor -1.2)
439 @result{} -2
440(floor -1.7)
441 @result{} -2
442(floor 5.99 3)
443 @result{} 1
444@end example
e6512bcf
RS
445@end defun
446
fa091c04 447@defun ceiling number &optional divisor
e6512bcf
RS
448This returns @var{number}, converted to an integer by rounding upward
449(towards positive infinity).
b7a2fc9b
RS
450
451@example
452(ceiling 1.2)
453 @result{} 2
454(ceiling 1.7)
455 @result{} 2
456(ceiling -1.2)
457 @result{} -1
458(ceiling -1.7)
459 @result{} -1
460@end example
e6512bcf
RS
461@end defun
462
fa091c04 463@defun round number &optional divisor
e6512bcf 464This returns @var{number}, converted to an integer by rounding towards the
bfe721d1
KH
465nearest integer. Rounding a value equidistant between two integers
466may choose the integer closer to zero, or it may prefer an even integer,
467depending on your machine.
b7a2fc9b
RS
468
469@example
470(round 1.2)
471 @result{} 1
472(round 1.7)
473 @result{} 2
474(round -1.2)
475 @result{} -1
476(round -1.7)
477 @result{} -2
478@end example
e6512bcf
RS
479@end defun
480
481@node Arithmetic Operations
482@section Arithmetic Operations
483
484 Emacs Lisp provides the traditional four arithmetic operations:
485addition, subtraction, multiplication, and division. Remainder and modulus
486functions supplement the division functions. The functions to
487add or subtract 1 are provided because they are traditional in Lisp and
488commonly used.
489
490 All of these functions except @code{%} return a floating point value
491if any argument is floating.
492
969fe9b5 493 It is important to note that in Emacs Lisp, arithmetic functions
e1e44180
SM
494do not check for overflow. Thus @code{(1+ 268435455)} may evaluate to
495@minus{}268435456, depending on your hardware.
e6512bcf
RS
496
497@defun 1+ number-or-marker
498This function returns @var{number-or-marker} plus 1.
499For example,
500
501@example
502(setq foo 4)
503 @result{} 4
504(1+ foo)
505 @result{} 5
506@end example
507
bfe721d1
KH
508This function is not analogous to the C operator @code{++}---it does not
509increment a variable. It just computes a sum. Thus, if we continue,
e6512bcf
RS
510
511@example
512foo
513 @result{} 4
514@end example
515
516If you want to increment the variable, you must use @code{setq},
517like this:
518
519@example
520(setq foo (1+ foo))
521 @result{} 5
522@end example
523@end defun
524
525@defun 1- number-or-marker
526This function returns @var{number-or-marker} minus 1.
527@end defun
528
e6512bcf
RS
529@defun + &rest numbers-or-markers
530This function adds its arguments together. When given no arguments,
bfe721d1 531@code{+} returns 0.
e6512bcf
RS
532
533@example
534(+)
535 @result{} 0
536(+ 1)
537 @result{} 1
538(+ 1 2 3 4)
539 @result{} 10
540@end example
541@end defun
542
f9f59935 543@defun - &optional number-or-marker &rest more-numbers-or-markers
e6512bcf
RS
544The @code{-} function serves two purposes: negation and subtraction.
545When @code{-} has a single argument, the value is the negative of the
546argument. When there are multiple arguments, @code{-} subtracts each of
f9f59935 547the @var{more-numbers-or-markers} from @var{number-or-marker},
bfe721d1 548cumulatively. If there are no arguments, the result is 0.
e6512bcf
RS
549
550@example
551(- 10 1 2 3 4)
552 @result{} 0
553(- 10)
554 @result{} -10
555(-)
556 @result{} 0
557@end example
558@end defun
559
560@defun * &rest numbers-or-markers
561This function multiplies its arguments together, and returns the
bfe721d1 562product. When given no arguments, @code{*} returns 1.
e6512bcf
RS
563
564@example
565(*)
566 @result{} 1
567(* 1)
568 @result{} 1
569(* 1 2 3 4)
570 @result{} 24
571@end example
572@end defun
573
574@defun / dividend divisor &rest divisors
05fd2b65 575This function divides @var{dividend} by @var{divisor} and returns the
e6512bcf
RS
576quotient. If there are additional arguments @var{divisors}, then it
577divides @var{dividend} by each divisor in turn. Each argument may be a
578number or a marker.
579
580If all the arguments are integers, then the result is an integer too.
581This means the result has to be rounded. On most machines, the result
582is rounded towards zero after each division, but some machines may round
583differently with negative arguments. This is because the Lisp function
584@code{/} is implemented using the C division operator, which also
585permits machine-dependent rounding. As a practical matter, all known
586machines round in the standard fashion.
587
588@cindex @code{arith-error} in division
969fe9b5
RS
589If you divide an integer by 0, an @code{arith-error} error is signaled.
590(@xref{Errors}.) Floating point division by zero returns either
ad800164 591infinity or a NaN if your machine supports @acronym{IEEE} floating point;
969fe9b5 592otherwise, it signals an @code{arith-error} error.
e6512bcf
RS
593
594@example
bda144f4 595@group
e6512bcf
RS
596(/ 6 2)
597 @result{} 3
bda144f4 598@end group
e6512bcf
RS
599(/ 5 2)
600 @result{} 2
969fe9b5
RS
601(/ 5.0 2)
602 @result{} 2.5
603(/ 5 2.0)
604 @result{} 2.5
605(/ 5.0 2.0)
606 @result{} 2.5
e6512bcf
RS
607(/ 25 3 2)
608 @result{} 4
ece35e15 609@group
e6512bcf 610(/ -17 6)
ece35e15
KB
611 @result{} -2 @r{(could in theory be @minus{}3 on some machines)}
612@end group
e6512bcf 613@end example
e6512bcf
RS
614@end defun
615
616@defun % dividend divisor
617@cindex remainder
618This function returns the integer remainder after division of @var{dividend}
619by @var{divisor}. The arguments must be integers or markers.
620
621For negative arguments, the remainder is in principle machine-dependent
622since the quotient is; but in practice, all known machines behave alike.
623
624An @code{arith-error} results if @var{divisor} is 0.
625
626@example
627(% 9 4)
628 @result{} 1
629(% -9 4)
630 @result{} -1
631(% 9 -4)
632 @result{} 1
633(% -9 -4)
634 @result{} -1
635@end example
636
637For any two integers @var{dividend} and @var{divisor},
638
639@example
640@group
641(+ (% @var{dividend} @var{divisor})
642 (* (/ @var{dividend} @var{divisor}) @var{divisor}))
643@end group
644@end example
645
646@noindent
647always equals @var{dividend}.
648@end defun
649
650@defun mod dividend divisor
651@cindex modulus
652This function returns the value of @var{dividend} modulo @var{divisor};
653in other words, the remainder after division of @var{dividend}
654by @var{divisor}, but with the same sign as @var{divisor}.
655The arguments must be numbers or markers.
656
657Unlike @code{%}, @code{mod} returns a well-defined result for negative
658arguments. It also permits floating point arguments; it rounds the
659quotient downward (towards minus infinity) to an integer, and uses that
660quotient to compute the remainder.
661
662An @code{arith-error} results if @var{divisor} is 0.
663
664@example
bda144f4 665@group
e6512bcf
RS
666(mod 9 4)
667 @result{} 1
bda144f4
MW
668@end group
669@group
e6512bcf
RS
670(mod -9 4)
671 @result{} 3
bda144f4
MW
672@end group
673@group
e6512bcf
RS
674(mod 9 -4)
675 @result{} -3
bda144f4
MW
676@end group
677@group
e6512bcf
RS
678(mod -9 -4)
679 @result{} -1
bda144f4
MW
680@end group
681@group
e6512bcf
RS
682(mod 5.5 2.5)
683 @result{} .5
bda144f4 684@end group
e6512bcf
RS
685@end example
686
687For any two numbers @var{dividend} and @var{divisor},
688
689@example
690@group
691(+ (mod @var{dividend} @var{divisor})
692 (* (floor @var{dividend} @var{divisor}) @var{divisor}))
693@end group
694@end example
695
696@noindent
bfe721d1
KH
697always equals @var{dividend}, subject to rounding error if either
698argument is floating point. For @code{floor}, see @ref{Numeric
699Conversions}.
e6512bcf
RS
700@end defun
701
702@node Rounding Operations
703@section Rounding Operations
704@cindex rounding without conversion
705
a9f0a989 706The functions @code{ffloor}, @code{fceiling}, @code{fround}, and
e6512bcf
RS
707@code{ftruncate} take a floating point argument and return a floating
708point result whose value is a nearby integer. @code{ffloor} returns the
bb61c6c6 709nearest integer below; @code{fceiling}, the nearest integer above;
05fd2b65 710@code{ftruncate}, the nearest integer in the direction towards zero;
e6512bcf
RS
711@code{fround}, the nearest integer.
712
713@defun ffloor float
714This function rounds @var{float} to the next lower integral value, and
715returns that value as a floating point number.
716@end defun
717
bb61c6c6 718@defun fceiling float
e6512bcf
RS
719This function rounds @var{float} to the next higher integral value, and
720returns that value as a floating point number.
721@end defun
722
05fd2b65 723@defun ftruncate float
e6512bcf
RS
724This function rounds @var{float} towards zero to an integral value, and
725returns that value as a floating point number.
726@end defun
727
728@defun fround float
729This function rounds @var{float} to the nearest integral value,
730and returns that value as a floating point number.
731@end defun
732
733@node Bitwise Operations
734@section Bitwise Operations on Integers
735
736 In a computer, an integer is represented as a binary number, a
737sequence of @dfn{bits} (digits which are either zero or one). A bitwise
738operation acts on the individual bits of such a sequence. For example,
739@dfn{shifting} moves the whole sequence left or right one or more places,
740reproducing the same pattern ``moved over''.
741
742 The bitwise operations in Emacs Lisp apply only to integers.
743
744@defun lsh integer1 count
745@cindex logical shift
746@code{lsh}, which is an abbreviation for @dfn{logical shift}, shifts the
05fd2b65
RS
747bits in @var{integer1} to the left @var{count} places, or to the right
748if @var{count} is negative, bringing zeros into the vacated bits. If
749@var{count} is negative, @code{lsh} shifts zeros into the leftmost
750(most-significant) bit, producing a positive result even if
751@var{integer1} is negative. Contrast this with @code{ash}, below.
752
753Here are two examples of @code{lsh}, shifting a pattern of bits one
754place to the left. We show only the low-order eight bits of the binary
755pattern; the rest are all zero.
e6512bcf
RS
756
757@example
758@group
759(lsh 5 1)
760 @result{} 10
761;; @r{Decimal 5 becomes decimal 10.}
76200000101 @result{} 00001010
763
764(lsh 7 1)
765 @result{} 14
766;; @r{Decimal 7 becomes decimal 14.}
76700000111 @result{} 00001110
768@end group
769@end example
770
771@noindent
772As the examples illustrate, shifting the pattern of bits one place to
773the left produces a number that is twice the value of the previous
774number.
775
bfe721d1 776Shifting a pattern of bits two places to the left produces results
e6512bcf
RS
777like this (with 8-bit binary numbers):
778
779@example
780@group
781(lsh 3 2)
782 @result{} 12
783;; @r{Decimal 3 becomes decimal 12.}
177c0ea7 78400000011 @result{} 00001100
e6512bcf
RS
785@end group
786@end example
787
bfe721d1 788On the other hand, shifting one place to the right looks like this:
e6512bcf
RS
789
790@example
791@group
792(lsh 6 -1)
793 @result{} 3
794;; @r{Decimal 6 becomes decimal 3.}
177c0ea7 79500000110 @result{} 00000011
e6512bcf
RS
796@end group
797
798@group
799(lsh 5 -1)
800 @result{} 2
801;; @r{Decimal 5 becomes decimal 2.}
177c0ea7 80200000101 @result{} 00000010
e6512bcf
RS
803@end group
804@end example
805
806@noindent
bfe721d1
KH
807As the example illustrates, shifting one place to the right divides the
808value of a positive integer by two, rounding downward.
809
810The function @code{lsh}, like all Emacs Lisp arithmetic functions, does
811not check for overflow, so shifting left can discard significant bits
812and change the sign of the number. For example, left shifting
e1e44180 813268,435,455 produces @minus{}2 on a 29-bit machine:
bfe721d1
KH
814
815@example
e1e44180 816(lsh 268435455 1) ; @r{left shift}
bfe721d1
KH
817 @result{} -2
818@end example
819
e1e44180 820In binary, in the 29-bit implementation, the argument looks like this:
bfe721d1
KH
821
822@example
823@group
e1e44180
SM
824;; @r{Decimal 268,435,455}
8250 1111 1111 1111 1111 1111 1111 1111
bfe721d1
KH
826@end group
827@end example
828
829@noindent
830which becomes the following when left shifted:
831
832@example
833@group
834;; @r{Decimal @minus{}2}
e1e44180 8351 1111 1111 1111 1111 1111 1111 1110
bfe721d1
KH
836@end group
837@end example
e6512bcf
RS
838@end defun
839
840@defun ash integer1 count
841@cindex arithmetic shift
842@code{ash} (@dfn{arithmetic shift}) shifts the bits in @var{integer1}
843to the left @var{count} places, or to the right if @var{count}
844is negative.
845
846@code{ash} gives the same results as @code{lsh} except when
847@var{integer1} and @var{count} are both negative. In that case,
bfe721d1
KH
848@code{ash} puts ones in the empty bit positions on the left, while
849@code{lsh} puts zeros in those bit positions.
e6512bcf
RS
850
851Thus, with @code{ash}, shifting the pattern of bits one place to the right
852looks like this:
853
854@example
855@group
177c0ea7 856(ash -6 -1) @result{} -3
e6512bcf 857;; @r{Decimal @minus{}6 becomes decimal @minus{}3.}
e1e44180 8581 1111 1111 1111 1111 1111 1111 1010
177c0ea7 859 @result{}
e1e44180 8601 1111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
861@end group
862@end example
863
864In contrast, shifting the pattern of bits one place to the right with
865@code{lsh} looks like this:
866
867@example
868@group
e1e44180
SM
869(lsh -6 -1) @result{} 268435453
870;; @r{Decimal @minus{}6 becomes decimal 268,435,453.}
8711 1111 1111 1111 1111 1111 1111 1010
177c0ea7 872 @result{}
e1e44180 8730 1111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
874@end group
875@end example
876
e6512bcf
RS
877Here are other examples:
878
879@c !!! Check if lined up in smallbook format! XDVI shows problem
880@c with smallbook but not with regular book! --rjc 16mar92
881@smallexample
882@group
e1e44180 883 ; @r{ 29-bit binary values}
e6512bcf 884
e1e44180
SM
885(lsh 5 2) ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
886 @result{} 20 ; = @r{0 0000 0000 0000 0000 0000 0001 0100}
e6512bcf
RS
887@end group
888@group
889(ash 5 2)
890 @result{} 20
e1e44180
SM
891(lsh -5 2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
892 @result{} -20 ; = @r{1 1111 1111 1111 1111 1111 1110 1100}
e6512bcf
RS
893(ash -5 2)
894 @result{} -20
895@end group
896@group
e1e44180
SM
897(lsh 5 -2) ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
898 @result{} 1 ; = @r{0 0000 0000 0000 0000 0000 0000 0001}
e6512bcf
RS
899@end group
900@group
901(ash 5 -2)
902 @result{} 1
903@end group
904@group
e1e44180
SM
905(lsh -5 -2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
906 @result{} 134217726 ; = @r{0 0111 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
907@end group
908@group
e1e44180
SM
909(ash -5 -2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
910 @result{} -2 ; = @r{1 1111 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
911@end group
912@end smallexample
913@end defun
914
915@defun logand &rest ints-or-markers
916@cindex logical and
917@cindex bitwise and
918This function returns the ``logical and'' of the arguments: the
919@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
920set in all the arguments. (``Set'' means that the value of the bit is 1
921rather than 0.)
922
923For example, using 4-bit binary numbers, the ``logical and'' of 13 and
92412 is 12: 1101 combined with 1100 produces 1100.
e6512bcf
RS
925In both the binary numbers, the leftmost two bits are set (i.e., they
926are 1's), so the leftmost two bits of the returned value are set.
927However, for the rightmost two bits, each is zero in at least one of
928the arguments, so the rightmost two bits of the returned value are 0's.
929
930@noindent
931Therefore,
932
933@example
934@group
935(logand 13 12)
936 @result{} 12
937@end group
938@end example
939
940If @code{logand} is not passed any argument, it returns a value of
941@minus{}1. This number is an identity element for @code{logand}
942because its binary representation consists entirely of ones. If
943@code{logand} is passed just one argument, it returns that argument.
944
945@smallexample
946@group
e1e44180 947 ; @r{ 29-bit binary values}
e6512bcf 948
e1e44180
SM
949(logand 14 13) ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
950 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
951 @result{} 12 ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
e6512bcf
RS
952@end group
953
954@group
e1e44180
SM
955(logand 14 13 4) ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
956 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
957 ; 4 = @r{0 0000 0000 0000 0000 0000 0000 0100}
958 @result{} 4 ; 4 = @r{0 0000 0000 0000 0000 0000 0000 0100}
e6512bcf
RS
959@end group
960
961@group
962(logand)
e1e44180 963 @result{} -1 ; -1 = @r{1 1111 1111 1111 1111 1111 1111 1111}
e6512bcf
RS
964@end group
965@end smallexample
966@end defun
967
968@defun logior &rest ints-or-markers
969@cindex logical inclusive or
970@cindex bitwise or
971This function returns the ``inclusive or'' of its arguments: the @var{n}th bit
972is set in the result if, and only if, the @var{n}th bit is set in at least
973one of the arguments. If there are no arguments, the result is zero,
974which is an identity element for this operation. If @code{logior} is
975passed just one argument, it returns that argument.
976
977@smallexample
978@group
e1e44180 979 ; @r{ 29-bit binary values}
e6512bcf 980
e1e44180
SM
981(logior 12 5) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
982 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
983 @result{} 13 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
e6512bcf
RS
984@end group
985
986@group
e1e44180
SM
987(logior 12 5 7) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
988 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
989 ; 7 = @r{0 0000 0000 0000 0000 0000 0000 0111}
990 @result{} 15 ; 15 = @r{0 0000 0000 0000 0000 0000 0000 1111}
e6512bcf
RS
991@end group
992@end smallexample
993@end defun
994
995@defun logxor &rest ints-or-markers
996@cindex bitwise exclusive or
997@cindex logical exclusive or
998This function returns the ``exclusive or'' of its arguments: the
05fd2b65
RS
999@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
1000set in an odd number of the arguments. If there are no arguments, the
1001result is 0, which is an identity element for this operation. If
1002@code{logxor} is passed just one argument, it returns that argument.
e6512bcf
RS
1003
1004@smallexample
1005@group
e1e44180 1006 ; @r{ 29-bit binary values}
e6512bcf 1007
e1e44180
SM
1008(logxor 12 5) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
1009 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
1010 @result{} 9 ; 9 = @r{0 0000 0000 0000 0000 0000 0000 1001}
e6512bcf
RS
1011@end group
1012
1013@group
e1e44180
SM
1014(logxor 12 5 7) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
1015 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
1016 ; 7 = @r{0 0000 0000 0000 0000 0000 0000 0111}
1017 @result{} 14 ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
e6512bcf
RS
1018@end group
1019@end smallexample
1020@end defun
1021
1022@defun lognot integer
1023@cindex logical not
1024@cindex bitwise not
1025This function returns the logical complement of its argument: the @var{n}th
1026bit is one in the result if, and only if, the @var{n}th bit is zero in
1027@var{integer}, and vice-versa.
1028
1029@example
177c0ea7 1030(lognot 5)
e6512bcf 1031 @result{} -6
e1e44180 1032;; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
e6512bcf 1033;; @r{becomes}
e1e44180 1034;; -6 = @r{1 1111 1111 1111 1111 1111 1111 1010}
e6512bcf
RS
1035@end example
1036@end defun
1037
4ac771a0
RS
1038@node Math Functions
1039@section Standard Mathematical Functions
e6512bcf
RS
1040@cindex transcendental functions
1041@cindex mathematical functions
1042
969fe9b5
RS
1043 These mathematical functions allow integers as well as floating point
1044numbers as arguments.
e6512bcf
RS
1045
1046@defun sin arg
1047@defunx cos arg
1048@defunx tan arg
1049These are the ordinary trigonometric functions, with argument measured
1050in radians.
1051@end defun
1052
1053@defun asin arg
15da7853 1054The value of @code{(asin @var{arg})} is a number between
37680279 1055@ifnottex
15da7853 1056@minus{}pi/2
37680279 1057@end ifnottex
15da7853 1058@tex
8241495d 1059@math{-\pi/2}
15da7853
KH
1060@end tex
1061and
37680279 1062@ifnottex
15da7853 1063pi/2
37680279 1064@end ifnottex
15da7853 1065@tex
8241495d 1066@math{\pi/2}
15da7853 1067@end tex
f3d95494
RS
1068(inclusive) whose sine is @var{arg}; if, however, @var{arg} is out of
1069range (outside [-1, 1]), it signals a @code{domain-error} error.
e6512bcf
RS
1070@end defun
1071
1072@defun acos arg
15da7853 1073The value of @code{(acos @var{arg})} is a number between 0 and
37680279 1074@ifnottex
15da7853 1075pi
37680279 1076@end ifnottex
15da7853 1077@tex
8241495d 1078@math{\pi}
15da7853 1079@end tex
f3d95494
RS
1080(inclusive) whose cosine is @var{arg}; if, however, @var{arg} is out
1081of range (outside [-1, 1]), it signals a @code{domain-error} error.
e6512bcf
RS
1082@end defun
1083
f120431c
EZ
1084@defun atan y &optional x
1085The value of @code{(atan @var{y})} is a number between
37680279 1086@ifnottex
15da7853 1087@minus{}pi/2
37680279 1088@end ifnottex
15da7853 1089@tex
8241495d 1090@math{-\pi/2}
15da7853
KH
1091@end tex
1092and
37680279 1093@ifnottex
15da7853 1094pi/2
37680279 1095@end ifnottex
15da7853 1096@tex
8241495d 1097@math{\pi/2}
15da7853 1098@end tex
f120431c
EZ
1099(exclusive) whose tangent is @var{y}. If the optional second
1100argument @var{x} is given, the value of @code{(atan y x)} is the
1101angle in radians between the vector @code{[@var{x}, @var{y}]} and the
1102@code{X} axis.
e6512bcf
RS
1103@end defun
1104
1105@defun exp arg
a9f0a989
RS
1106This is the exponential function; it returns
1107@tex
8241495d 1108@math{e}
a9f0a989 1109@end tex
37680279 1110@ifnottex
a9f0a989 1111@i{e}
37680279 1112@end ifnottex
a9f0a989
RS
1113to the power @var{arg}.
1114@tex
8241495d 1115@math{e}
a9f0a989 1116@end tex
37680279 1117@ifnottex
a9f0a989 1118@i{e}
37680279 1119@end ifnottex
a9f0a989
RS
1120is a fundamental mathematical constant also called the base of natural
1121logarithms.
e6512bcf
RS
1122@end defun
1123
1124@defun log arg &optional base
1125This function returns the logarithm of @var{arg}, with base @var{base}.
a9f0a989
RS
1126If you don't specify @var{base}, the base
1127@tex
8241495d 1128@math{e}
a9f0a989 1129@end tex
37680279 1130@ifnottex
a9f0a989 1131@i{e}
37680279 1132@end ifnottex
f3d95494
RS
1133is used. If @var{arg} is negative, it signals a @code{domain-error}
1134error.
e6512bcf
RS
1135@end defun
1136
1137@ignore
1138@defun expm1 arg
1139This function returns @code{(1- (exp @var{arg}))}, but it is more
1140accurate than that when @var{arg} is negative and @code{(exp @var{arg})}
1141is close to 1.
1142@end defun
1143
1144@defun log1p arg
1145This function returns @code{(log (1+ @var{arg}))}, but it is more
1146accurate than that when @var{arg} is so small that adding 1 to it would
1147lose accuracy.
1148@end defun
1149@end ignore
1150
1151@defun log10 arg
1152This function returns the logarithm of @var{arg}, with base 10. If
f3d95494
RS
1153@var{arg} is negative, it signals a @code{domain-error} error.
1154@code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}, at least
1155approximately.
e6512bcf
RS
1156@end defun
1157
1158@defun expt x y
8be5e0fc
RS
1159This function returns @var{x} raised to power @var{y}. If both
1160arguments are integers and @var{y} is positive, the result is an
4182ecfc 1161integer; in this case, overflow causes truncation, so watch out.
e6512bcf
RS
1162@end defun
1163
1164@defun sqrt arg
1165This returns the square root of @var{arg}. If @var{arg} is negative,
903a1a91 1166it signals a @code{domain-error} error.
e6512bcf
RS
1167@end defun
1168
1169@node Random Numbers
1170@section Random Numbers
1171@cindex random numbers
1172
1173A deterministic computer program cannot generate true random numbers.
1174For most purposes, @dfn{pseudo-random numbers} suffice. A series of
1175pseudo-random numbers is generated in a deterministic fashion. The
1176numbers are not truly random, but they have certain properties that
1177mimic a random series. For example, all possible values occur equally
1178often in a pseudo-random series.
1179
1180In Emacs, pseudo-random numbers are generated from a ``seed'' number.
1181Starting from any given seed, the @code{random} function always
1182generates the same sequence of numbers. Emacs always starts with the
1183same seed value, so the sequence of values of @code{random} is actually
1184the same in each Emacs run! For example, in one operating system, the
1185first call to @code{(random)} after you start Emacs always returns
1186-1457731, and the second one always returns -7692030. This
1187repeatability is helpful for debugging.
1188
8241495d
RS
1189If you want random numbers that don't always come out the same, execute
1190@code{(random t)}. This chooses a new seed based on the current time of
ad800164 1191day and on Emacs's process @acronym{ID} number.
e6512bcf
RS
1192
1193@defun random &optional limit
1194This function returns a pseudo-random integer. Repeated calls return a
1195series of pseudo-random integers.
1196
22697dac 1197If @var{limit} is a positive integer, the value is chosen to be
bfe721d1 1198nonnegative and less than @var{limit}.
e6512bcf
RS
1199
1200If @var{limit} is @code{t}, it means to choose a new seed based on the
ad800164 1201current time of day and on Emacs's process @acronym{ID} number.
e6512bcf
RS
1202@c "Emacs'" is incorrect usage!
1203
1204On some machines, any integer representable in Lisp may be the result
1205of @code{random}. On other machines, the result can never be larger
1206than a certain maximum or less than a certain (negative) minimum.
1207@end defun
ab5796a9
MB
1208
1209@ignore
1210 arch-tag: 574e8dd2-d513-4616-9844-c9a27869782e
1211@end ignore