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