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