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