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