Update years in copyright notice; nfc.
[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
TTN
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
4@c 2004, 2005 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
RS
324This function acts like @code{eq} except when both arguments are
325numbers. It compares numbers by type and numberic value, so that
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
609(/ -17 6)
610 @result{} -2
611@end example
612
613The result of @code{(/ -17 6)} could in principle be -3 on some
614machines.
615@end defun
616
617@defun % dividend divisor
618@cindex remainder
619This function returns the integer remainder after division of @var{dividend}
620by @var{divisor}. The arguments must be integers or markers.
621
622For negative arguments, the remainder is in principle machine-dependent
623since the quotient is; but in practice, all known machines behave alike.
624
625An @code{arith-error} results if @var{divisor} is 0.
626
627@example
628(% 9 4)
629 @result{} 1
630(% -9 4)
631 @result{} -1
632(% 9 -4)
633 @result{} 1
634(% -9 -4)
635 @result{} -1
636@end example
637
638For any two integers @var{dividend} and @var{divisor},
639
640@example
641@group
642(+ (% @var{dividend} @var{divisor})
643 (* (/ @var{dividend} @var{divisor}) @var{divisor}))
644@end group
645@end example
646
647@noindent
648always equals @var{dividend}.
649@end defun
650
651@defun mod dividend divisor
652@cindex modulus
653This function returns the value of @var{dividend} modulo @var{divisor};
654in other words, the remainder after division of @var{dividend}
655by @var{divisor}, but with the same sign as @var{divisor}.
656The arguments must be numbers or markers.
657
658Unlike @code{%}, @code{mod} returns a well-defined result for negative
659arguments. It also permits floating point arguments; it rounds the
660quotient downward (towards minus infinity) to an integer, and uses that
661quotient to compute the remainder.
662
663An @code{arith-error} results if @var{divisor} is 0.
664
665@example
bda144f4 666@group
e6512bcf
RS
667(mod 9 4)
668 @result{} 1
bda144f4
MW
669@end group
670@group
e6512bcf
RS
671(mod -9 4)
672 @result{} 3
bda144f4
MW
673@end group
674@group
e6512bcf
RS
675(mod 9 -4)
676 @result{} -3
bda144f4
MW
677@end group
678@group
e6512bcf
RS
679(mod -9 -4)
680 @result{} -1
bda144f4
MW
681@end group
682@group
e6512bcf
RS
683(mod 5.5 2.5)
684 @result{} .5
bda144f4 685@end group
e6512bcf
RS
686@end example
687
688For any two numbers @var{dividend} and @var{divisor},
689
690@example
691@group
692(+ (mod @var{dividend} @var{divisor})
693 (* (floor @var{dividend} @var{divisor}) @var{divisor}))
694@end group
695@end example
696
697@noindent
bfe721d1
KH
698always equals @var{dividend}, subject to rounding error if either
699argument is floating point. For @code{floor}, see @ref{Numeric
700Conversions}.
e6512bcf
RS
701@end defun
702
703@node Rounding Operations
704@section Rounding Operations
705@cindex rounding without conversion
706
a9f0a989 707The functions @code{ffloor}, @code{fceiling}, @code{fround}, and
e6512bcf
RS
708@code{ftruncate} take a floating point argument and return a floating
709point result whose value is a nearby integer. @code{ffloor} returns the
bb61c6c6 710nearest integer below; @code{fceiling}, the nearest integer above;
05fd2b65 711@code{ftruncate}, the nearest integer in the direction towards zero;
e6512bcf
RS
712@code{fround}, the nearest integer.
713
714@defun ffloor float
715This function rounds @var{float} to the next lower integral value, and
716returns that value as a floating point number.
717@end defun
718
bb61c6c6 719@defun fceiling float
e6512bcf
RS
720This function rounds @var{float} to the next higher integral value, and
721returns that value as a floating point number.
722@end defun
723
05fd2b65 724@defun ftruncate float
e6512bcf
RS
725This function rounds @var{float} towards zero to an integral value, and
726returns that value as a floating point number.
727@end defun
728
729@defun fround float
730This function rounds @var{float} to the nearest integral value,
731and returns that value as a floating point number.
732@end defun
733
734@node Bitwise Operations
735@section Bitwise Operations on Integers
736
737 In a computer, an integer is represented as a binary number, a
738sequence of @dfn{bits} (digits which are either zero or one). A bitwise
739operation acts on the individual bits of such a sequence. For example,
740@dfn{shifting} moves the whole sequence left or right one or more places,
741reproducing the same pattern ``moved over''.
742
743 The bitwise operations in Emacs Lisp apply only to integers.
744
745@defun lsh integer1 count
746@cindex logical shift
747@code{lsh}, which is an abbreviation for @dfn{logical shift}, shifts the
05fd2b65
RS
748bits in @var{integer1} to the left @var{count} places, or to the right
749if @var{count} is negative, bringing zeros into the vacated bits. If
750@var{count} is negative, @code{lsh} shifts zeros into the leftmost
751(most-significant) bit, producing a positive result even if
752@var{integer1} is negative. Contrast this with @code{ash}, below.
753
754Here are two examples of @code{lsh}, shifting a pattern of bits one
755place to the left. We show only the low-order eight bits of the binary
756pattern; the rest are all zero.
e6512bcf
RS
757
758@example
759@group
760(lsh 5 1)
761 @result{} 10
762;; @r{Decimal 5 becomes decimal 10.}
76300000101 @result{} 00001010
764
765(lsh 7 1)
766 @result{} 14
767;; @r{Decimal 7 becomes decimal 14.}
76800000111 @result{} 00001110
769@end group
770@end example
771
772@noindent
773As the examples illustrate, shifting the pattern of bits one place to
774the left produces a number that is twice the value of the previous
775number.
776
bfe721d1 777Shifting a pattern of bits two places to the left produces results
e6512bcf
RS
778like this (with 8-bit binary numbers):
779
780@example
781@group
782(lsh 3 2)
783 @result{} 12
784;; @r{Decimal 3 becomes decimal 12.}
177c0ea7 78500000011 @result{} 00001100
e6512bcf
RS
786@end group
787@end example
788
bfe721d1 789On the other hand, shifting one place to the right looks like this:
e6512bcf
RS
790
791@example
792@group
793(lsh 6 -1)
794 @result{} 3
795;; @r{Decimal 6 becomes decimal 3.}
177c0ea7 79600000110 @result{} 00000011
e6512bcf
RS
797@end group
798
799@group
800(lsh 5 -1)
801 @result{} 2
802;; @r{Decimal 5 becomes decimal 2.}
177c0ea7 80300000101 @result{} 00000010
e6512bcf
RS
804@end group
805@end example
806
807@noindent
bfe721d1
KH
808As the example illustrates, shifting one place to the right divides the
809value of a positive integer by two, rounding downward.
810
811The function @code{lsh}, like all Emacs Lisp arithmetic functions, does
812not check for overflow, so shifting left can discard significant bits
813and change the sign of the number. For example, left shifting
e1e44180 814268,435,455 produces @minus{}2 on a 29-bit machine:
bfe721d1
KH
815
816@example
e1e44180 817(lsh 268435455 1) ; @r{left shift}
bfe721d1
KH
818 @result{} -2
819@end example
820
e1e44180 821In binary, in the 29-bit implementation, the argument looks like this:
bfe721d1
KH
822
823@example
824@group
e1e44180
SM
825;; @r{Decimal 268,435,455}
8260 1111 1111 1111 1111 1111 1111 1111
bfe721d1
KH
827@end group
828@end example
829
830@noindent
831which becomes the following when left shifted:
832
833@example
834@group
835;; @r{Decimal @minus{}2}
e1e44180 8361 1111 1111 1111 1111 1111 1111 1110
bfe721d1
KH
837@end group
838@end example
e6512bcf
RS
839@end defun
840
841@defun ash integer1 count
842@cindex arithmetic shift
843@code{ash} (@dfn{arithmetic shift}) shifts the bits in @var{integer1}
844to the left @var{count} places, or to the right if @var{count}
845is negative.
846
847@code{ash} gives the same results as @code{lsh} except when
848@var{integer1} and @var{count} are both negative. In that case,
bfe721d1
KH
849@code{ash} puts ones in the empty bit positions on the left, while
850@code{lsh} puts zeros in those bit positions.
e6512bcf
RS
851
852Thus, with @code{ash}, shifting the pattern of bits one place to the right
853looks like this:
854
855@example
856@group
177c0ea7 857(ash -6 -1) @result{} -3
e6512bcf 858;; @r{Decimal @minus{}6 becomes decimal @minus{}3.}
e1e44180 8591 1111 1111 1111 1111 1111 1111 1010
177c0ea7 860 @result{}
e1e44180 8611 1111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
862@end group
863@end example
864
865In contrast, shifting the pattern of bits one place to the right with
866@code{lsh} looks like this:
867
868@example
869@group
e1e44180
SM
870(lsh -6 -1) @result{} 268435453
871;; @r{Decimal @minus{}6 becomes decimal 268,435,453.}
8721 1111 1111 1111 1111 1111 1111 1010
177c0ea7 873 @result{}
e1e44180 8740 1111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
875@end group
876@end example
877
e6512bcf
RS
878Here are other examples:
879
880@c !!! Check if lined up in smallbook format! XDVI shows problem
881@c with smallbook but not with regular book! --rjc 16mar92
882@smallexample
883@group
e1e44180 884 ; @r{ 29-bit binary values}
e6512bcf 885
e1e44180
SM
886(lsh 5 2) ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
887 @result{} 20 ; = @r{0 0000 0000 0000 0000 0000 0001 0100}
e6512bcf
RS
888@end group
889@group
890(ash 5 2)
891 @result{} 20
e1e44180
SM
892(lsh -5 2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
893 @result{} -20 ; = @r{1 1111 1111 1111 1111 1111 1110 1100}
e6512bcf
RS
894(ash -5 2)
895 @result{} -20
896@end group
897@group
e1e44180
SM
898(lsh 5 -2) ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
899 @result{} 1 ; = @r{0 0000 0000 0000 0000 0000 0000 0001}
e6512bcf
RS
900@end group
901@group
902(ash 5 -2)
903 @result{} 1
904@end group
905@group
e1e44180
SM
906(lsh -5 -2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
907 @result{} 134217726 ; = @r{0 0111 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
908@end group
909@group
e1e44180
SM
910(ash -5 -2) ; -5 = @r{1 1111 1111 1111 1111 1111 1111 1011}
911 @result{} -2 ; = @r{1 1111 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
912@end group
913@end smallexample
914@end defun
915
916@defun logand &rest ints-or-markers
917@cindex logical and
918@cindex bitwise and
919This function returns the ``logical and'' of the arguments: the
920@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
921set in all the arguments. (``Set'' means that the value of the bit is 1
922rather than 0.)
923
924For example, using 4-bit binary numbers, the ``logical and'' of 13 and
92512 is 12: 1101 combined with 1100 produces 1100.
e6512bcf
RS
926In both the binary numbers, the leftmost two bits are set (i.e., they
927are 1's), so the leftmost two bits of the returned value are set.
928However, for the rightmost two bits, each is zero in at least one of
929the arguments, so the rightmost two bits of the returned value are 0's.
930
931@noindent
932Therefore,
933
934@example
935@group
936(logand 13 12)
937 @result{} 12
938@end group
939@end example
940
941If @code{logand} is not passed any argument, it returns a value of
942@minus{}1. This number is an identity element for @code{logand}
943because its binary representation consists entirely of ones. If
944@code{logand} is passed just one argument, it returns that argument.
945
946@smallexample
947@group
e1e44180 948 ; @r{ 29-bit binary values}
e6512bcf 949
e1e44180
SM
950(logand 14 13) ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
951 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
952 @result{} 12 ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
e6512bcf
RS
953@end group
954
955@group
e1e44180
SM
956(logand 14 13 4) ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
957 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
958 ; 4 = @r{0 0000 0000 0000 0000 0000 0000 0100}
959 @result{} 4 ; 4 = @r{0 0000 0000 0000 0000 0000 0000 0100}
e6512bcf
RS
960@end group
961
962@group
963(logand)
e1e44180 964 @result{} -1 ; -1 = @r{1 1111 1111 1111 1111 1111 1111 1111}
e6512bcf
RS
965@end group
966@end smallexample
967@end defun
968
969@defun logior &rest ints-or-markers
970@cindex logical inclusive or
971@cindex bitwise or
972This function returns the ``inclusive or'' of its arguments: the @var{n}th bit
973is set in the result if, and only if, the @var{n}th bit is set in at least
974one of the arguments. If there are no arguments, the result is zero,
975which is an identity element for this operation. If @code{logior} is
976passed just one argument, it returns that argument.
977
978@smallexample
979@group
e1e44180 980 ; @r{ 29-bit binary values}
e6512bcf 981
e1e44180
SM
982(logior 12 5) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
983 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
984 @result{} 13 ; 13 = @r{0 0000 0000 0000 0000 0000 0000 1101}
e6512bcf
RS
985@end group
986
987@group
e1e44180
SM
988(logior 12 5 7) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
989 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
990 ; 7 = @r{0 0000 0000 0000 0000 0000 0000 0111}
991 @result{} 15 ; 15 = @r{0 0000 0000 0000 0000 0000 0000 1111}
e6512bcf
RS
992@end group
993@end smallexample
994@end defun
995
996@defun logxor &rest ints-or-markers
997@cindex bitwise exclusive or
998@cindex logical exclusive or
999This function returns the ``exclusive or'' of its arguments: the
05fd2b65
RS
1000@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
1001set in an odd number of the arguments. If there are no arguments, the
1002result is 0, which is an identity element for this operation. If
1003@code{logxor} is passed just one argument, it returns that argument.
e6512bcf
RS
1004
1005@smallexample
1006@group
e1e44180 1007 ; @r{ 29-bit binary values}
e6512bcf 1008
e1e44180
SM
1009(logxor 12 5) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
1010 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
1011 @result{} 9 ; 9 = @r{0 0000 0000 0000 0000 0000 0000 1001}
e6512bcf
RS
1012@end group
1013
1014@group
e1e44180
SM
1015(logxor 12 5 7) ; 12 = @r{0 0000 0000 0000 0000 0000 0000 1100}
1016 ; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
1017 ; 7 = @r{0 0000 0000 0000 0000 0000 0000 0111}
1018 @result{} 14 ; 14 = @r{0 0000 0000 0000 0000 0000 0000 1110}
e6512bcf
RS
1019@end group
1020@end smallexample
1021@end defun
1022
1023@defun lognot integer
1024@cindex logical not
1025@cindex bitwise not
1026This function returns the logical complement of its argument: the @var{n}th
1027bit is one in the result if, and only if, the @var{n}th bit is zero in
1028@var{integer}, and vice-versa.
1029
1030@example
177c0ea7 1031(lognot 5)
e6512bcf 1032 @result{} -6
e1e44180 1033;; 5 = @r{0 0000 0000 0000 0000 0000 0000 0101}
e6512bcf 1034;; @r{becomes}
e1e44180 1035;; -6 = @r{1 1111 1111 1111 1111 1111 1111 1010}
e6512bcf
RS
1036@end example
1037@end defun
1038
4ac771a0
RS
1039@node Math Functions
1040@section Standard Mathematical Functions
e6512bcf
RS
1041@cindex transcendental functions
1042@cindex mathematical functions
1043
969fe9b5
RS
1044 These mathematical functions allow integers as well as floating point
1045numbers as arguments.
e6512bcf
RS
1046
1047@defun sin arg
1048@defunx cos arg
1049@defunx tan arg
1050These are the ordinary trigonometric functions, with argument measured
1051in radians.
1052@end defun
1053
1054@defun asin arg
15da7853 1055The value of @code{(asin @var{arg})} is a number between
37680279 1056@ifnottex
15da7853 1057@minus{}pi/2
37680279 1058@end ifnottex
15da7853 1059@tex
8241495d 1060@math{-\pi/2}
15da7853
KH
1061@end tex
1062and
37680279 1063@ifnottex
15da7853 1064pi/2
37680279 1065@end ifnottex
15da7853 1066@tex
8241495d 1067@math{\pi/2}
15da7853 1068@end tex
f3d95494
RS
1069(inclusive) whose sine is @var{arg}; if, however, @var{arg} is out of
1070range (outside [-1, 1]), it signals a @code{domain-error} error.
e6512bcf
RS
1071@end defun
1072
1073@defun acos arg
15da7853 1074The value of @code{(acos @var{arg})} is a number between 0 and
37680279 1075@ifnottex
15da7853 1076pi
37680279 1077@end ifnottex
15da7853 1078@tex
8241495d 1079@math{\pi}
15da7853 1080@end tex
f3d95494
RS
1081(inclusive) whose cosine is @var{arg}; if, however, @var{arg} is out
1082of range (outside [-1, 1]), it signals a @code{domain-error} error.
e6512bcf
RS
1083@end defun
1084
f120431c
EZ
1085@defun atan y &optional x
1086The value of @code{(atan @var{y})} is a number between
37680279 1087@ifnottex
15da7853 1088@minus{}pi/2
37680279 1089@end ifnottex
15da7853 1090@tex
8241495d 1091@math{-\pi/2}
15da7853
KH
1092@end tex
1093and
37680279 1094@ifnottex
15da7853 1095pi/2
37680279 1096@end ifnottex
15da7853 1097@tex
8241495d 1098@math{\pi/2}
15da7853 1099@end tex
f120431c
EZ
1100(exclusive) whose tangent is @var{y}. If the optional second
1101argument @var{x} is given, the value of @code{(atan y x)} is the
1102angle in radians between the vector @code{[@var{x}, @var{y}]} and the
1103@code{X} axis.
e6512bcf
RS
1104@end defun
1105
1106@defun exp arg
a9f0a989
RS
1107This is the exponential function; it returns
1108@tex
8241495d 1109@math{e}
a9f0a989 1110@end tex
37680279 1111@ifnottex
a9f0a989 1112@i{e}
37680279 1113@end ifnottex
a9f0a989
RS
1114to the power @var{arg}.
1115@tex
8241495d 1116@math{e}
a9f0a989 1117@end tex
37680279 1118@ifnottex
a9f0a989 1119@i{e}
37680279 1120@end ifnottex
a9f0a989
RS
1121is a fundamental mathematical constant also called the base of natural
1122logarithms.
e6512bcf
RS
1123@end defun
1124
1125@defun log arg &optional base
1126This function returns the logarithm of @var{arg}, with base @var{base}.
a9f0a989
RS
1127If you don't specify @var{base}, the base
1128@tex
8241495d 1129@math{e}
a9f0a989 1130@end tex
37680279 1131@ifnottex
a9f0a989 1132@i{e}
37680279 1133@end ifnottex
f3d95494
RS
1134is used. If @var{arg} is negative, it signals a @code{domain-error}
1135error.
e6512bcf
RS
1136@end defun
1137
1138@ignore
1139@defun expm1 arg
1140This function returns @code{(1- (exp @var{arg}))}, but it is more
1141accurate than that when @var{arg} is negative and @code{(exp @var{arg})}
1142is close to 1.
1143@end defun
1144
1145@defun log1p arg
1146This function returns @code{(log (1+ @var{arg}))}, but it is more
1147accurate than that when @var{arg} is so small that adding 1 to it would
1148lose accuracy.
1149@end defun
1150@end ignore
1151
1152@defun log10 arg
1153This function returns the logarithm of @var{arg}, with base 10. If
f3d95494
RS
1154@var{arg} is negative, it signals a @code{domain-error} error.
1155@code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}, at least
1156approximately.
e6512bcf
RS
1157@end defun
1158
1159@defun expt x y
8be5e0fc
RS
1160This function returns @var{x} raised to power @var{y}. If both
1161arguments are integers and @var{y} is positive, the result is an
4182ecfc 1162integer; in this case, overflow causes truncation, so watch out.
e6512bcf
RS
1163@end defun
1164
1165@defun sqrt arg
1166This returns the square root of @var{arg}. If @var{arg} is negative,
903a1a91 1167it signals a @code{domain-error} error.
e6512bcf
RS
1168@end defun
1169
1170@node Random Numbers
1171@section Random Numbers
1172@cindex random numbers
1173
1174A deterministic computer program cannot generate true random numbers.
1175For most purposes, @dfn{pseudo-random numbers} suffice. A series of
1176pseudo-random numbers is generated in a deterministic fashion. The
1177numbers are not truly random, but they have certain properties that
1178mimic a random series. For example, all possible values occur equally
1179often in a pseudo-random series.
1180
1181In Emacs, pseudo-random numbers are generated from a ``seed'' number.
1182Starting from any given seed, the @code{random} function always
1183generates the same sequence of numbers. Emacs always starts with the
1184same seed value, so the sequence of values of @code{random} is actually
1185the same in each Emacs run! For example, in one operating system, the
1186first call to @code{(random)} after you start Emacs always returns
1187-1457731, and the second one always returns -7692030. This
1188repeatability is helpful for debugging.
1189
8241495d
RS
1190If you want random numbers that don't always come out the same, execute
1191@code{(random t)}. This chooses a new seed based on the current time of
ad800164 1192day and on Emacs's process @acronym{ID} number.
e6512bcf
RS
1193
1194@defun random &optional limit
1195This function returns a pseudo-random integer. Repeated calls return a
1196series of pseudo-random integers.
1197
22697dac 1198If @var{limit} is a positive integer, the value is chosen to be
bfe721d1 1199nonnegative and less than @var{limit}.
e6512bcf
RS
1200
1201If @var{limit} is @code{t}, it means to choose a new seed based on the
ad800164 1202current time of day and on Emacs's process @acronym{ID} number.
e6512bcf
RS
1203@c "Emacs'" is incorrect usage!
1204
1205On some machines, any integer representable in Lisp may be the result
1206of @code{random}. On other machines, the result can never be larger
1207than a certain maximum or less than a certain (negative) minimum.
1208@end defun
ab5796a9
MB
1209
1210@ignore
1211 arch-tag: 574e8dd2-d513-4616-9844-c9a27869782e
1212@end ignore