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