declare smobs in alloc.c
[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 402@defun < number-or-marker &rest number-or-markers
7b385b02
GM
403This function tests whether each argument is strictly less than the
404following argument. It returns @code{t} if so, @code{nil} otherwise.
b8d4c8d0
GM
405@end defun
406
3fbba716 407@defun <= number-or-marker &rest number-or-markers
7b385b02
GM
408This function tests whether each argument is less than or equal to
409the following argument. It returns @code{t} if so, @code{nil} otherwise.
b8d4c8d0
GM
410@end defun
411
3fbba716 412@defun > number-or-marker &rest number-or-markers
7b385b02
GM
413This function tests whether each argument is strictly greater than
414the following argument. It returns @code{t} if so, @code{nil} otherwise.
b8d4c8d0
GM
415@end defun
416
3fbba716 417@defun >= number-or-marker &rest number-or-markers
7b385b02
GM
418This function tests whether each argument is greater than or equal to
419the following argument. It returns @code{t} if so, @code{nil} otherwise.
b8d4c8d0
GM
420@end defun
421
422@defun max number-or-marker &rest numbers-or-markers
423This function returns the largest of its arguments.
09b73f08 424If any of the arguments is floating point, the value is returned
b8d4c8d0
GM
425as floating point, even if it was given as an integer.
426
427@example
428(max 20)
429 @result{} 20
430(max 1 2.5)
431 @result{} 2.5
432(max 1 3 2.5)
433 @result{} 3.0
434@end example
435@end defun
436
437@defun min number-or-marker &rest numbers-or-markers
438This function returns the smallest of its arguments.
09b73f08 439If any of the arguments is floating point, the value is returned
b8d4c8d0
GM
440as floating point, even if it was given as an integer.
441
442@example
443(min -4 1)
444 @result{} -4
445@end example
446@end defun
447
448@defun abs number
449This function returns the absolute value of @var{number}.
450@end defun
451
452@node Numeric Conversions
453@section Numeric Conversions
454@cindex rounding in conversions
455@cindex number conversions
456@cindex converting numbers
457
458To convert an integer to floating point, use the function @code{float}.
459
460@defun float number
461This returns @var{number} converted to floating point.
09b73f08 462If @var{number} is already floating point, @code{float} returns
b8d4c8d0
GM
463it unchanged.
464@end defun
465
09b73f08 466 There are four functions to convert floating-point numbers to
48de8b12
CY
467integers; they differ in how they round. All accept an argument
468@var{number} and an optional argument @var{divisor}. Both arguments
09b73f08 469may be integers or floating-point numbers. @var{divisor} may also be
b8d4c8d0
GM
470@code{nil}. If @var{divisor} is @code{nil} or omitted, these
471functions convert @var{number} to an integer, or return it unchanged
472if it already is an integer. If @var{divisor} is non-@code{nil}, they
473divide @var{number} by @var{divisor} and convert the result to an
33f846fb 474integer. If @var{divisor} is zero (whether integer or
09b73f08 475floating point), Emacs signals an @code{arith-error} error.
b8d4c8d0
GM
476
477@defun truncate number &optional divisor
478This returns @var{number}, converted to an integer by rounding towards
479zero.
480
481@example
482(truncate 1.2)
483 @result{} 1
484(truncate 1.7)
485 @result{} 1
486(truncate -1.2)
487 @result{} -1
488(truncate -1.7)
489 @result{} -1
490@end example
491@end defun
492
493@defun floor number &optional divisor
494This returns @var{number}, converted to an integer by rounding downward
495(towards negative infinity).
496
497If @var{divisor} is specified, this uses the kind of division
498operation that corresponds to @code{mod}, rounding downward.
499
500@example
501(floor 1.2)
502 @result{} 1
503(floor 1.7)
504 @result{} 1
505(floor -1.2)
506 @result{} -2
507(floor -1.7)
508 @result{} -2
509(floor 5.99 3)
510 @result{} 1
511@end example
512@end defun
513
514@defun ceiling number &optional divisor
515This returns @var{number}, converted to an integer by rounding upward
516(towards positive infinity).
517
518@example
519(ceiling 1.2)
520 @result{} 2
521(ceiling 1.7)
522 @result{} 2
523(ceiling -1.2)
524 @result{} -1
525(ceiling -1.7)
526 @result{} -1
527@end example
528@end defun
529
530@defun round number &optional divisor
531This returns @var{number}, converted to an integer by rounding towards the
532nearest integer. Rounding a value equidistant between two integers
37ca9077 533returns the even integer.
b8d4c8d0
GM
534
535@example
536(round 1.2)
537 @result{} 1
538(round 1.7)
539 @result{} 2
540(round -1.2)
541 @result{} -1
542(round -1.7)
543 @result{} -2
544@end example
545@end defun
546
547@node Arithmetic Operations
548@section Arithmetic Operations
549@cindex arithmetic operations
550
48de8b12
CY
551 Emacs Lisp provides the traditional four arithmetic operations
552(addition, subtraction, multiplication, and division), as well as
553remainder and modulus functions, and functions to add or subtract 1.
554Except for @code{%}, each of these functions accepts both integer and
09b73f08
PE
555floating-point arguments, and returns a floating-point number if any
556argument is floating point.
b8d4c8d0 557
1917cf46
PE
558 Emacs Lisp arithmetic functions do not check for integer overflow.
559Thus @code{(1+ 536870911)} may evaluate to
001903b5 560@minus{}536870912, depending on your hardware.
b8d4c8d0
GM
561
562@defun 1+ number-or-marker
563This function returns @var{number-or-marker} plus 1.
564For example,
565
566@example
567(setq foo 4)
568 @result{} 4
569(1+ foo)
570 @result{} 5
571@end example
572
573This function is not analogous to the C operator @code{++}---it does not
574increment a variable. It just computes a sum. Thus, if we continue,
575
576@example
577foo
578 @result{} 4
579@end example
580
581If you want to increment the variable, you must use @code{setq},
582like this:
583
584@example
585(setq foo (1+ foo))
586 @result{} 5
587@end example
588@end defun
589
590@defun 1- number-or-marker
591This function returns @var{number-or-marker} minus 1.
592@end defun
593
594@defun + &rest numbers-or-markers
595This function adds its arguments together. When given no arguments,
596@code{+} returns 0.
597
598@example
599(+)
600 @result{} 0
601(+ 1)
602 @result{} 1
603(+ 1 2 3 4)
604 @result{} 10
605@end example
606@end defun
607
608@defun - &optional number-or-marker &rest more-numbers-or-markers
609The @code{-} function serves two purposes: negation and subtraction.
610When @code{-} has a single argument, the value is the negative of the
611argument. When there are multiple arguments, @code{-} subtracts each of
612the @var{more-numbers-or-markers} from @var{number-or-marker},
613cumulatively. If there are no arguments, the result is 0.
614
615@example
616(- 10 1 2 3 4)
617 @result{} 0
618(- 10)
619 @result{} -10
620(-)
621 @result{} 0
622@end example
623@end defun
624
625@defun * &rest numbers-or-markers
626This function multiplies its arguments together, and returns the
627product. When given no arguments, @code{*} returns 1.
628
629@example
630(*)
631 @result{} 1
632(* 1)
633 @result{} 1
634(* 1 2 3 4)
635 @result{} 24
636@end example
637@end defun
638
639@defun / dividend divisor &rest divisors
640This function divides @var{dividend} by @var{divisor} and returns the
641quotient. If there are additional arguments @var{divisors}, then it
642divides @var{dividend} by each divisor in turn. Each argument may be a
643number or a marker.
644
48de8b12
CY
645If all the arguments are integers, the result is an integer, obtained
646by rounding the quotient towards zero after each division.
b8d4c8d0
GM
647
648@example
649@group
650(/ 6 2)
651 @result{} 3
652@end group
48de8b12 653@group
b8d4c8d0
GM
654(/ 5 2)
655 @result{} 2
48de8b12
CY
656@end group
657@group
b8d4c8d0
GM
658(/ 5.0 2)
659 @result{} 2.5
48de8b12
CY
660@end group
661@group
b8d4c8d0
GM
662(/ 5 2.0)
663 @result{} 2.5
48de8b12
CY
664@end group
665@group
b8d4c8d0
GM
666(/ 5.0 2.0)
667 @result{} 2.5
48de8b12
CY
668@end group
669@group
b8d4c8d0
GM
670(/ 25 3 2)
671 @result{} 4
48de8b12 672@end group
b8d4c8d0
GM
673@group
674(/ -17 6)
48de8b12 675 @result{} -2
b8d4c8d0
GM
676@end group
677@end example
48de8b12
CY
678
679@cindex @code{arith-error} in division
680If you divide an integer by the integer 0, Emacs signals an
09b73f08
PE
681@code{arith-error} error (@pxref{Errors}). Floating-point division of
682a nonzero number by zero yields either positive or negative infinity
683(@pxref{Float Basics}).
b8d4c8d0
GM
684@end defun
685
686@defun % dividend divisor
687@cindex remainder
688This function returns the integer remainder after division of @var{dividend}
689by @var{divisor}. The arguments must be integers or markers.
690
48de8b12
CY
691For any two integers @var{dividend} and @var{divisor},
692
693@example
694@group
695(+ (% @var{dividend} @var{divisor})
696 (* (/ @var{dividend} @var{divisor}) @var{divisor}))
697@end group
698@end example
b8d4c8d0 699
48de8b12 700@noindent
c7dff2f6 701always equals @var{dividend} if @var{divisor} is nonzero.
b8d4c8d0
GM
702
703@example
704(% 9 4)
705 @result{} 1
706(% -9 4)
707 @result{} -1
708(% 9 -4)
709 @result{} 1
710(% -9 -4)
711 @result{} -1
712@end example
b8d4c8d0
GM
713@end defun
714
715@defun mod dividend divisor
716@cindex modulus
717This function returns the value of @var{dividend} modulo @var{divisor};
718in other words, the remainder after division of @var{dividend}
719by @var{divisor}, but with the same sign as @var{divisor}.
720The arguments must be numbers or markers.
721
09b73f08 722Unlike @code{%}, @code{mod} permits floating-point arguments; it
48de8b12
CY
723rounds the quotient downward (towards minus infinity) to an integer,
724and uses that quotient to compute the remainder.
b8d4c8d0 725
c990426a
PE
726If @var{divisor} is zero, @code{mod} signals an @code{arith-error}
727error if both arguments are integers, and returns a NaN otherwise.
b8d4c8d0
GM
728
729@example
730@group
731(mod 9 4)
732 @result{} 1
733@end group
734@group
735(mod -9 4)
736 @result{} 3
737@end group
738@group
739(mod 9 -4)
740 @result{} -3
741@end group
742@group
743(mod -9 -4)
744 @result{} -1
745@end group
746@group
747(mod 5.5 2.5)
748 @result{} .5
749@end group
750@end example
751
752For any two numbers @var{dividend} and @var{divisor},
753
754@example
755@group
756(+ (mod @var{dividend} @var{divisor})
757 (* (floor @var{dividend} @var{divisor}) @var{divisor}))
758@end group
759@end example
760
761@noindent
762always equals @var{dividend}, subject to rounding error if either
c7dff2f6
PE
763argument is floating point and to an @code{arith-error} if @var{dividend} is an
764integer and @var{divisor} is 0. For @code{floor}, see @ref{Numeric
b8d4c8d0
GM
765Conversions}.
766@end defun
767
768@node Rounding Operations
769@section Rounding Operations
770@cindex rounding without conversion
771
772The functions @code{ffloor}, @code{fceiling}, @code{fround}, and
09b73f08
PE
773@code{ftruncate} take a floating-point argument and return a floating-point
774result whose value is a nearby integer. @code{ffloor} returns the
b8d4c8d0
GM
775nearest integer below; @code{fceiling}, the nearest integer above;
776@code{ftruncate}, the nearest integer in the direction towards zero;
777@code{fround}, the nearest integer.
778
779@defun ffloor float
780This function rounds @var{float} to the next lower integral value, and
09b73f08 781returns that value as a floating-point number.
b8d4c8d0
GM
782@end defun
783
784@defun fceiling float
785This function rounds @var{float} to the next higher integral value, and
09b73f08 786returns that value as a floating-point number.
b8d4c8d0
GM
787@end defun
788
789@defun ftruncate float
790This function rounds @var{float} towards zero to an integral value, and
09b73f08 791returns that value as a floating-point number.
b8d4c8d0
GM
792@end defun
793
794@defun fround float
795This function rounds @var{float} to the nearest integral value,
09b73f08 796and returns that value as a floating-point number.
37ca9077 797Rounding a value equidistant between two integers returns the even integer.
b8d4c8d0
GM
798@end defun
799
800@node Bitwise Operations
801@section Bitwise Operations on Integers
802@cindex bitwise arithmetic
803@cindex logical arithmetic
804
805 In a computer, an integer is represented as a binary number, a
806sequence of @dfn{bits} (digits which are either zero or one). A bitwise
807operation acts on the individual bits of such a sequence. For example,
808@dfn{shifting} moves the whole sequence left or right one or more places,
16152b76 809reproducing the same pattern ``moved over''.
b8d4c8d0
GM
810
811 The bitwise operations in Emacs Lisp apply only to integers.
812
813@defun lsh integer1 count
814@cindex logical shift
815@code{lsh}, which is an abbreviation for @dfn{logical shift}, shifts the
816bits in @var{integer1} to the left @var{count} places, or to the right
817if @var{count} is negative, bringing zeros into the vacated bits. If
818@var{count} is negative, @code{lsh} shifts zeros into the leftmost
819(most-significant) bit, producing a positive result even if
820@var{integer1} is negative. Contrast this with @code{ash}, below.
821
822Here are two examples of @code{lsh}, shifting a pattern of bits one
823place to the left. We show only the low-order eight bits of the binary
824pattern; the rest are all zero.
825
826@example
827@group
828(lsh 5 1)
829 @result{} 10
830;; @r{Decimal 5 becomes decimal 10.}
83100000101 @result{} 00001010
832
833(lsh 7 1)
834 @result{} 14
835;; @r{Decimal 7 becomes decimal 14.}
83600000111 @result{} 00001110
837@end group
838@end example
839
840@noindent
841As the examples illustrate, shifting the pattern of bits one place to
842the left produces a number that is twice the value of the previous
843number.
844
845Shifting a pattern of bits two places to the left produces results
846like this (with 8-bit binary numbers):
847
848@example
849@group
850(lsh 3 2)
851 @result{} 12
852;; @r{Decimal 3 becomes decimal 12.}
85300000011 @result{} 00001100
854@end group
855@end example
856
857On the other hand, shifting one place to the right looks like this:
858
859@example
860@group
861(lsh 6 -1)
862 @result{} 3
863;; @r{Decimal 6 becomes decimal 3.}
86400000110 @result{} 00000011
865@end group
866
867@group
868(lsh 5 -1)
869 @result{} 2
870;; @r{Decimal 5 becomes decimal 2.}
87100000101 @result{} 00000010
872@end group
873@end example
874
875@noindent
876As the example illustrates, shifting one place to the right divides the
877value of a positive integer by two, rounding downward.
878
c717b326 879The function @code{lsh}, like all Emacs Lisp arithmetic functions, does
b8d4c8d0
GM
880not check for overflow, so shifting left can discard significant bits
881and change the sign of the number. For example, left shifting
001903b5 882536,870,911 produces @minus{}2 in the 30-bit implementation:
b8d4c8d0
GM
883
884@example
1ddd6622 885(lsh 536870911 1) ; @r{left shift}
b8d4c8d0
GM
886 @result{} -2
887@end example
888
001903b5 889In binary, the argument looks like this:
b8d4c8d0
GM
890
891@example
892@group
1ddd6622 893;; @r{Decimal 536,870,911}
001903b5 8940111...111111 (30 bits total)
b8d4c8d0
GM
895@end group
896@end example
897
898@noindent
899which becomes the following when left shifted:
900
901@example
902@group
903;; @r{Decimal @minus{}2}
001903b5 9041111...111110 (30 bits total)
b8d4c8d0
GM
905@end group
906@end example
907@end defun
908
909@defun ash integer1 count
910@cindex arithmetic shift
911@code{ash} (@dfn{arithmetic shift}) shifts the bits in @var{integer1}
912to the left @var{count} places, or to the right if @var{count}
913is negative.
914
915@code{ash} gives the same results as @code{lsh} except when
916@var{integer1} and @var{count} are both negative. In that case,
917@code{ash} puts ones in the empty bit positions on the left, while
918@code{lsh} puts zeros in those bit positions.
919
920Thus, with @code{ash}, shifting the pattern of bits one place to the right
921looks like this:
922
923@example
924@group
925(ash -6 -1) @result{} -3
926;; @r{Decimal @minus{}6 becomes decimal @minus{}3.}
001903b5 9271111...111010 (30 bits total)
b8d4c8d0 928 @result{}
001903b5 9291111...111101 (30 bits total)
b8d4c8d0
GM
930@end group
931@end example
932
933In contrast, shifting the pattern of bits one place to the right with
934@code{lsh} looks like this:
935
936@example
937@group
1ddd6622
GM
938(lsh -6 -1) @result{} 536870909
939;; @r{Decimal @minus{}6 becomes decimal 536,870,909.}
001903b5 9401111...111010 (30 bits total)
b8d4c8d0 941 @result{}
001903b5 9420111...111101 (30 bits total)
b8d4c8d0
GM
943@end group
944@end example
945
946Here are other examples:
947
948@c !!! Check if lined up in smallbook format! XDVI shows problem
949@c with smallbook but not with regular book! --rjc 16mar92
950@smallexample
951@group
001903b5 952 ; @r{ 30-bit binary values}
b8d4c8d0 953
be14b9ab
PE
954(lsh 5 2) ; 5 = @r{0000...000101}
955 @result{} 20 ; = @r{0000...010100}
b8d4c8d0
GM
956@end group
957@group
958(ash 5 2)
959 @result{} 20
be14b9ab
PE
960(lsh -5 2) ; -5 = @r{1111...111011}
961 @result{} -20 ; = @r{1111...101100}
b8d4c8d0
GM
962(ash -5 2)
963 @result{} -20
964@end group
965@group
be14b9ab
PE
966(lsh 5 -2) ; 5 = @r{0000...000101}
967 @result{} 1 ; = @r{0000...000001}
b8d4c8d0
GM
968@end group
969@group
970(ash 5 -2)
971 @result{} 1
972@end group
973@group
be14b9ab 974(lsh -5 -2) ; -5 = @r{1111...111011}
001903b5 975 @result{} 268435454
be14b9ab 976 ; = @r{0011...111110}
b8d4c8d0
GM
977@end group
978@group
be14b9ab
PE
979(ash -5 -2) ; -5 = @r{1111...111011}
980 @result{} -2 ; = @r{1111...111110}
b8d4c8d0
GM
981@end group
982@end smallexample
983@end defun
984
985@defun logand &rest ints-or-markers
986This function returns the ``logical and'' of the arguments: the
987@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
988set in all the arguments. (``Set'' means that the value of the bit is 1
989rather than 0.)
990
991For example, using 4-bit binary numbers, the ``logical and'' of 13 and
99212 is 12: 1101 combined with 1100 produces 1100.
993In both the binary numbers, the leftmost two bits are set (i.e., they
994are 1's), so the leftmost two bits of the returned value are set.
995However, for the rightmost two bits, each is zero in at least one of
996the arguments, so the rightmost two bits of the returned value are 0's.
997
998@noindent
999Therefore,
1000
1001@example
1002@group
1003(logand 13 12)
1004 @result{} 12
1005@end group
1006@end example
1007
1008If @code{logand} is not passed any argument, it returns a value of
1009@minus{}1. This number is an identity element for @code{logand}
1010because its binary representation consists entirely of ones. If
1011@code{logand} is passed just one argument, it returns that argument.
1012
1013@smallexample
1014@group
001903b5 1015 ; @r{ 30-bit binary values}
b8d4c8d0 1016
be14b9ab
PE
1017(logand 14 13) ; 14 = @r{0000...001110}
1018 ; 13 = @r{0000...001101}
1019 @result{} 12 ; 12 = @r{0000...001100}
b8d4c8d0
GM
1020@end group
1021
1022@group
be14b9ab
PE
1023(logand 14 13 4) ; 14 = @r{0000...001110}
1024 ; 13 = @r{0000...001101}
1025 ; 4 = @r{0000...000100}
1026 @result{} 4 ; 4 = @r{0000...000100}
b8d4c8d0
GM
1027@end group
1028
1029@group
1030(logand)
be14b9ab 1031 @result{} -1 ; -1 = @r{1111...111111}
b8d4c8d0
GM
1032@end group
1033@end smallexample
1034@end defun
1035
1036@defun logior &rest ints-or-markers
1037This function returns the ``inclusive or'' of its arguments: the @var{n}th bit
1038is set in the result if, and only if, the @var{n}th bit is set in at least
1039one of the arguments. If there are no arguments, the result is zero,
1040which is an identity element for this operation. If @code{logior} is
1041passed just one argument, it returns that argument.
1042
1043@smallexample
1044@group
001903b5 1045 ; @r{ 30-bit binary values}
b8d4c8d0 1046
be14b9ab
PE
1047(logior 12 5) ; 12 = @r{0000...001100}
1048 ; 5 = @r{0000...000101}
1049 @result{} 13 ; 13 = @r{0000...001101}
b8d4c8d0
GM
1050@end group
1051
1052@group
be14b9ab
PE
1053(logior 12 5 7) ; 12 = @r{0000...001100}
1054 ; 5 = @r{0000...000101}
1055 ; 7 = @r{0000...000111}
1056 @result{} 15 ; 15 = @r{0000...001111}
b8d4c8d0
GM
1057@end group
1058@end smallexample
1059@end defun
1060
1061@defun logxor &rest ints-or-markers
1062This function returns the ``exclusive or'' of its arguments: the
1063@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
1064set in an odd number of the arguments. If there are no arguments, the
1065result is 0, which is an identity element for this operation. If
1066@code{logxor} is passed just one argument, it returns that argument.
1067
1068@smallexample
1069@group
001903b5 1070 ; @r{ 30-bit binary values}
b8d4c8d0 1071
be14b9ab
PE
1072(logxor 12 5) ; 12 = @r{0000...001100}
1073 ; 5 = @r{0000...000101}
1074 @result{} 9 ; 9 = @r{0000...001001}
b8d4c8d0
GM
1075@end group
1076
1077@group
be14b9ab
PE
1078(logxor 12 5 7) ; 12 = @r{0000...001100}
1079 ; 5 = @r{0000...000101}
1080 ; 7 = @r{0000...000111}
1081 @result{} 14 ; 14 = @r{0000...001110}
b8d4c8d0
GM
1082@end group
1083@end smallexample
1084@end defun
1085
1086@defun lognot integer
1087This function returns the logical complement of its argument: the @var{n}th
1088bit is one in the result if, and only if, the @var{n}th bit is zero in
1089@var{integer}, and vice-versa.
1090
1091@example
1092(lognot 5)
1093 @result{} -6
001903b5 1094;; 5 = @r{0000...000101} (30 bits total)
b8d4c8d0 1095;; @r{becomes}
001903b5 1096;; -6 = @r{1111...111010} (30 bits total)
b8d4c8d0
GM
1097@end example
1098@end defun
1099
1100@node Math Functions
1101@section Standard Mathematical Functions
1102@cindex transcendental functions
1103@cindex mathematical functions
1104@cindex floating-point functions
1105
09b73f08 1106 These mathematical functions allow integers as well as floating-point
b8d4c8d0
GM
1107numbers as arguments.
1108
1109@defun sin arg
1110@defunx cos arg
1111@defunx tan arg
48de8b12
CY
1112These are the basic trigonometric functions, with argument @var{arg}
1113measured in radians.
b8d4c8d0
GM
1114@end defun
1115
1116@defun asin arg
1117The value of @code{(asin @var{arg})} is a number between
1118@ifnottex
1119@minus{}pi/2
1120@end ifnottex
1121@tex
1122@math{-\pi/2}
1123@end tex
1124and
1125@ifnottex
1126pi/2
1127@end ifnottex
1128@tex
1129@math{\pi/2}
1130@end tex
c990426a
PE
1131(inclusive) whose sine is @var{arg}. If @var{arg} is out of range
1132(outside [@minus{}1, 1]), @code{asin} returns a NaN.
b8d4c8d0
GM
1133@end defun
1134
1135@defun acos arg
1136The value of @code{(acos @var{arg})} is a number between 0 and
1137@ifnottex
1138pi
1139@end ifnottex
1140@tex
1141@math{\pi}
1142@end tex
c990426a
PE
1143(inclusive) whose cosine is @var{arg}. If @var{arg} is out of range
1144(outside [@minus{}1, 1]), @code{acos} returns a NaN.
b8d4c8d0
GM
1145@end defun
1146
1147@defun atan y &optional x
1148The value of @code{(atan @var{y})} is a number between
1149@ifnottex
1150@minus{}pi/2
1151@end ifnottex
1152@tex
1153@math{-\pi/2}
1154@end tex
1155and
1156@ifnottex
1157pi/2
1158@end ifnottex
1159@tex
1160@math{\pi/2}
1161@end tex
1162(exclusive) whose tangent is @var{y}. If the optional second
1163argument @var{x} is given, the value of @code{(atan y x)} is the
1164angle in radians between the vector @code{[@var{x}, @var{y}]} and the
1165@code{X} axis.
1166@end defun
1167
1168@defun exp arg
fead402d
CY
1169This is the exponential function; it returns @math{e} to the power
1170@var{arg}.
b8d4c8d0
GM
1171@end defun
1172
1173@defun log arg &optional base
fead402d
CY
1174This function returns the logarithm of @var{arg}, with base
1175@var{base}. If you don't specify @var{base}, the natural base
c990426a
PE
1176@math{e} is used. If @var{arg} or @var{base} is negative, @code{log}
1177returns a NaN.
b8d4c8d0
GM
1178@end defun
1179
b8d4c8d0
GM
1180@defun expt x y
1181This function returns @var{x} raised to power @var{y}. If both
c717b326
PE
1182arguments are integers and @var{y} is positive, the result is an
1183integer; in this case, overflow causes truncation, so watch out.
c990426a
PE
1184If @var{x} is a finite negative number and @var{y} is a finite
1185non-integer, @code{expt} returns a NaN.
b8d4c8d0
GM
1186@end defun
1187
1188@defun sqrt arg
c7dff2f6
PE
1189This returns the square root of @var{arg}. If @var{arg} is finite
1190and less than zero, @code{sqrt} returns a NaN.
b8d4c8d0
GM
1191@end defun
1192
fead402d
CY
1193In addition, Emacs defines the following common mathematical
1194constants:
1195
1196@defvar float-e
1197The mathematical constant @math{e} (2.71828@dots{}).
1198@end defvar
1199
1200@defvar float-pi
1201The mathematical constant @math{pi} (3.14159@dots{}).
1202@end defvar
1203
b8d4c8d0
GM
1204@node Random Numbers
1205@section Random Numbers
1206@cindex random numbers
1207
48de8b12
CY
1208 A deterministic computer program cannot generate true random
1209numbers. For most purposes, @dfn{pseudo-random numbers} suffice. A
1210series of pseudo-random numbers is generated in a deterministic
1211fashion. The numbers are not truly random, but they have certain
1212properties that mimic a random series. For example, all possible
1213values occur equally often in a pseudo-random series.
b8d4c8d0 1214
48de8b12
CY
1215 Pseudo-random numbers are generated from a ``seed''. Starting from
1216any given seed, the @code{random} function always generates the same
1217sequence of numbers. By default, Emacs initializes the random seed at
1218startup, in such a way that the sequence of values of @code{random}
1219(with overwhelming likelihood) differs in each Emacs run.
0e23ef9d 1220
48de8b12 1221 Sometimes you want the random number sequence to be repeatable. For
0e23ef9d
PE
1222example, when debugging a program whose behavior depends on the random
1223number sequence, it is helpful to get the same behavior in each
1224program run. To make the sequence repeat, execute @code{(random "")}.
1225This sets the seed to a constant value for your particular Emacs
1226executable (though it may differ for other Emacs builds). You can use
1227other strings to choose various seed values.
b8d4c8d0
GM
1228
1229@defun random &optional limit
1230This function returns a pseudo-random integer. Repeated calls return a
1231series of pseudo-random integers.
1232
1233If @var{limit} is a positive integer, the value is chosen to be
48de8b12 1234nonnegative and less than @var{limit}. Otherwise, the value might be
1df7defd 1235any integer representable in Lisp, i.e., an integer between
48de8b12
CY
1236@code{most-negative-fixnum} and @code{most-positive-fixnum}
1237(@pxref{Integer Basics}).
b8d4c8d0 1238
c7dff2f6
PE
1239If @var{limit} is @code{t}, it means to choose a new seed as if Emacs
1240were restarting.
b8d4c8d0 1241
0e23ef9d
PE
1242If @var{limit} is a string, it means to choose a new seed based on the
1243string's contents.
1244
b8d4c8d0 1245@end defun