(create_process): Restore the signal state
[bpt/emacs.git] / lispref / numbers.texi
CommitLineData
e6512bcf
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/numbers
05fd2b65 6@node Numbers, Strings and Characters, Lisp Data Types, Top
e6512bcf
RS
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
05fd2b65
RS
152.71828. They can also be expressed in exponential notation:
161.5e2 equals 150; in this example, @samp{e2} stands for ten to the
e6512bcf
RS
17second power, and is multiplied by 1.5. Floating point values are not
18exact; they have a fixed, limited amount of precision.
19
20 Support for floating point numbers is a new feature in Emacs 19, and it
21is controlled by a separate compilation option, so you may encounter a site
22where Emacs does not support them.
23
24@menu
25* Integer Basics:: Representation and range of integers.
26* Float Basics:: Representation and range of floating point.
27* Predicates on Numbers:: Testing for numbers.
28* Comparison of Numbers:: Equality and inequality predicates.
29* Numeric Conversions:: Converting float to integer and vice versa.
30* Arithmetic Operations:: How to add, subtract, multiply and divide.
31* Rounding Operations:: Explicitly rounding floating point numbers.
32* Bitwise Operations:: Logical and, or, not, shifting.
4ac771a0 33* Math Functions:: Trig, exponential and logarithmic functions.
e6512bcf
RS
34* Random Numbers:: Obtaining random integers, predictable or not.
35@end menu
36
37@node Integer Basics
38@comment node-name, next, previous, up
39@section Integer Basics
40
41 The range of values for an integer depends on the machine. The
94b00316 42minimum range is @minus{}134217728 to 134217727 (28 bits; i.e.,
e6512bcf 43@ifinfo
8be5e0fc 44-2**27
e6512bcf
RS
45@end ifinfo
46@tex
94b00316 47$-2^{27}$
e6512bcf
RS
48@end tex
49to
50@ifinfo
94b00316 512**27 - 1),
e6512bcf
RS
52@end ifinfo
53@tex
94b00316 54$2^{27}-1$),
e6512bcf 55@end tex
94b00316
RS
56but some machines may provide a wider range. Many examples in this
57chapter assume an integer has 28 bits.
e6512bcf
RS
58@cindex overflow
59
60 The Lisp reader reads an integer as a sequence of digits with optional
61initial sign and optional final period.
62
63@example
64 1 ; @r{The integer 1.}
65 1. ; @r{The integer 1.}
66+1 ; @r{Also the integer 1.}
67-1 ; @r{The integer @minus{}1.}
8be5e0fc 68 268435457 ; @r{Also the integer 1, due to overflow.}
e6512bcf
RS
69 0 ; @r{The integer 0.}
70-0 ; @r{The integer 0.}
71@end example
72
73 To understand how various functions work on integers, especially the
74bitwise operators (@pxref{Bitwise Operations}), it is often helpful to
75view the numbers in their binary form.
76
8be5e0fc 77 In 28-bit binary, the decimal integer 5 looks like this:
e6512bcf
RS
78
79@example
8be5e0fc 800000 0000 0000 0000 0000 0000 0101
e6512bcf
RS
81@end example
82
83@noindent
84(We have inserted spaces between groups of 4 bits, and two spaces
85between groups of 8 bits, to make the binary integer easier to read.)
86
87 The integer @minus{}1 looks like this:
88
89@example
8be5e0fc 901111 1111 1111 1111 1111 1111 1111
e6512bcf
RS
91@end example
92
93@noindent
94@cindex two's complement
8be5e0fc 95@minus{}1 is represented as 28 ones. (This is called @dfn{two's
e6512bcf
RS
96complement} notation.)
97
98 The negative integer, @minus{}5, is creating by subtracting 4 from
99@minus{}1. In binary, the decimal integer 4 is 100. Consequently,
100@minus{}5 looks like this:
101
102@example
8be5e0fc 1031111 1111 1111 1111 1111 1111 1011
e6512bcf
RS
104@end example
105
94b00316 106 In this implementation, the largest 28-bit binary integer is the
8be5e0fc 107decimal integer 134,217,727. In binary, it looks like this:
e6512bcf
RS
108
109@example
8be5e0fc 1100111 1111 1111 1111 1111 1111 1111
e6512bcf
RS
111@end example
112
113 Since the arithmetic functions do not check whether integers go
8be5e0fc
RS
114outside their range, when you add 1 to 134,217,727, the value is the
115negative integer @minus{}134,217,728:
e6512bcf
RS
116
117@example
8be5e0fc
RS
118(+ 1 134217727)
119 @result{} -134217728
120 @result{} 1000 0000 0000 0000 0000 0000 0000
e6512bcf
RS
121@end example
122
123 Many of the following functions accept markers for arguments as well
124as integers. (@xref{Markers}.) More precisely, the actual arguments to
125such functions may be either integers or markers, which is why we often
126give these arguments the name @var{int-or-marker}. When the argument
127value is a marker, its position value is used and its buffer is ignored.
128
129@ignore
130 In version 19, except where @emph{integer} is specified as an
131argument, all of the functions for markers and integers also work for
132floating point numbers.
133@end ignore
134
135@node Float Basics
136@section Floating Point Basics
137
138@cindex @code{LISP_FLOAT_TYPE} configuration macro
139 Emacs version 19 supports floating point numbers, if compiled with the
140macro @code{LISP_FLOAT_TYPE} defined. The precise range of floating
141point numbers is machine-specific; it is the same as the range of the C
142data type @code{double} on the machine in question.
143
144 The printed representation for floating point numbers requires either
145a decimal point (with at least one digit following), an exponent, or
146both. For example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2},
147@samp{1.5e3}, and @samp{.15e4} are five ways of writing a floating point
148number whose value is 1500. They are all equivalent. You can also use
149a minus sign to write negative floating point numbers, as in
150@samp{-1.0}.
151
152@cindex IEEE floating point
153@cindex positive infinity
154@cindex negative infinity
155@cindex infinity
156@cindex NaN
157 Most modern computers support the IEEE floating point standard, which
158provides for positive infinity and negative infinity as floating point
05fd2b65
RS
159values. It also provides for a class of values called NaN or
160``not-a-number''; numerical functions return such values in cases where
161there is no correct answer. For example, @code{(sqrt -1.0)} returns a
162NaN. For practical purposes, there's no significant difference between
163different NaN values in Emacs Lisp, and there's no rule for precisely
164which NaN value should be used in a particular case, so this manual
165doesn't try to distinguish them. Emacs Lisp has no read syntax for NaNs
166or infinities; perhaps we should create a syntax in the future.
e6512bcf
RS
167
168 You can use @code{logb} to extract the binary exponent of a floating
169point number (or estimate the logarithm of an integer):
170
171@defun logb number
172This function returns the binary exponent of @var{number}. More
173precisely, the value is the logarithm of @var{number} base 2, rounded
174down to an integer.
175@end defun
176
177@node Predicates on Numbers
178@section Type Predicates for Numbers
179
180 The functions in this section test whether the argument is a number or
181whether it is a certain sort of number. The functions @code{integerp}
182and @code{floatp} can take any type of Lisp object as argument (the
183predicates would not be of much use otherwise); but the @code{zerop}
184predicate requires a number as its argument. See also
185@code{integer-or-marker-p} and @code{number-or-marker-p}, in
186@ref{Predicates on Markers}.
187
188@defun floatp object
189This predicate tests whether its argument is a floating point
190number and returns @code{t} if so, @code{nil} otherwise.
191
192@code{floatp} does not exist in Emacs versions 18 and earlier.
193@end defun
194
195@defun integerp object
196This predicate tests whether its argument is an integer, and returns
197@code{t} if so, @code{nil} otherwise.
198@end defun
199
200@defun numberp object
201This predicate tests whether its argument is a number (either integer or
202floating point), and returns @code{t} if so, @code{nil} otherwise.
203@end defun
204
05fd2b65 205@defun wholenump object
e6512bcf 206@cindex natural numbers
05fd2b65
RS
207The @code{wholenump} predicate (whose name comes from the phrase
208``whole-number-p'') tests to see whether its argument is a nonnegative
e6512bcf
RS
209integer, and returns @code{t} if so, @code{nil} otherwise. 0 is
210considered non-negative.
211
05fd2b65
RS
212@findex natnump
213@code{natnump} is an obsolete synonym for @code{wholenump}.
e6512bcf
RS
214@end defun
215
216@defun zerop number
217This predicate tests whether its argument is zero, and returns @code{t}
218if so, @code{nil} otherwise. The argument must be a number.
219
220These two forms are equivalent: @code{(zerop x)} @equiv{} @code{(= x 0)}.
221@end defun
222
223@node Comparison of Numbers
224@section Comparison of Numbers
225@cindex number equality
226
05fd2b65
RS
227 To test numbers for numerical equality, you should normally use
228@code{=}, not @code{eq}. There can be many distinct floating point
229number objects with the same numeric value. If you use @code{eq} to
230compare them, then you test whether two values are the same
231@emph{object}. By contrast, @code{=} compares only the numeric values
232of the objects.
233
234 At present, each integer value has a unique Lisp object in Emacs Lisp.
235Therefore, @code{eq} is equivalent @code{=} where integers are
236concerned. It is sometimes convenient to use @code{eq} for comparing an
237unknown value with an integer, because @code{eq} does not report an
238error if the unknown value is not a number---it accepts arguments of any
239type. By contrast, @code{=} signals an error if the arguments are not
240numbers or markers. However, it is a good idea to use @code{=} if you
241can, even for comparing integers, just in case we change the
242representation of integers in a future Emacs version.
e6512bcf
RS
243
244 There is another wrinkle: because floating point arithmetic is not
245exact, it is often a bad idea to check for equality of two floating
246point values. Usually it is better to test for approximate equality.
247Here's a function to do this:
248
249@example
250(defvar fuzz-factor 1.0e-6)
251(defun approx-equal (x y)
bfe721d1
KH
252 (or (and (= x 0) (= y 0))
253 (< (/ (abs (- x y))
254 (max (abs x) (abs y)))
255 fuzz-factor)))
e6512bcf
RS
256@end example
257
258@cindex CL note---integers vrs @code{eq}
259@quotation
05fd2b65 260@b{Common Lisp note:} Comparing numbers in Common Lisp always requires
e6512bcf
RS
261@code{=} because Common Lisp implements multi-word integers, and two
262distinct integer objects can have the same numeric value. Emacs Lisp
263can have just one integer object for any given value because it has a
264limited range of integer values.
265@end quotation
266
267@defun = number-or-marker1 number-or-marker2
268This function tests whether its arguments are numerically equal, and
269returns @code{t} if so, @code{nil} otherwise.
270@end defun
271
272@defun /= number-or-marker1 number-or-marker2
273This function tests whether its arguments are numerically equal, and
274returns @code{t} if they are not, and @code{nil} if they are.
275@end defun
276
277@defun < number-or-marker1 number-or-marker2
278This function tests whether its first argument is strictly less than
279its second argument. It returns @code{t} if so, @code{nil} otherwise.
280@end defun
281
282@defun <= number-or-marker1 number-or-marker2
283This function tests whether its first argument is less than or equal
284to its second argument. It returns @code{t} if so, @code{nil}
285otherwise.
286@end defun
287
288@defun > number-or-marker1 number-or-marker2
289This function tests whether its first argument is strictly greater
290than its second argument. It returns @code{t} if so, @code{nil}
291otherwise.
292@end defun
293
294@defun >= number-or-marker1 number-or-marker2
295This function tests whether its first argument is greater than or
296equal to its second argument. It returns @code{t} if so, @code{nil}
297otherwise.
298@end defun
299
300@defun max number-or-marker &rest numbers-or-markers
301This function returns the largest of its arguments.
302
303@example
304(max 20)
305 @result{} 20
306(max 1 2.5)
307 @result{} 2.5
308(max 1 3 2.5)
309 @result{} 3
310@end example
311@end defun
312
313@defun min number-or-marker &rest numbers-or-markers
314This function returns the smallest of its arguments.
315
316@example
317(min -4 1)
318 @result{} -4
319@end example
320@end defun
321
322@node Numeric Conversions
323@section Numeric Conversions
324@cindex rounding in conversions
325
326To convert an integer to floating point, use the function @code{float}.
327
328@defun float number
329This returns @var{number} converted to floating point.
330If @var{number} is already a floating point number, @code{float} returns
331it unchanged.
332@end defun
333
334There are four functions to convert floating point numbers to integers;
335they differ in how they round. These functions accept integer arguments
336also, and return such arguments unchanged.
337
338@defun truncate number
339This returns @var{number}, converted to an integer by rounding towards
340zero.
341@end defun
342
343@defun floor number &optional divisor
344This returns @var{number}, converted to an integer by rounding downward
345(towards negative infinity).
346
347If @var{divisor} is specified, @var{number} is divided by @var{divisor}
348before the floor is taken; this is the division operation that
349corresponds to @code{mod}. An @code{arith-error} results if
350@var{divisor} is 0.
351@end defun
352
353@defun ceiling number
354This returns @var{number}, converted to an integer by rounding upward
355(towards positive infinity).
356@end defun
357
358@defun round number
359This returns @var{number}, converted to an integer by rounding towards the
bfe721d1
KH
360nearest integer. Rounding a value equidistant between two integers
361may choose the integer closer to zero, or it may prefer an even integer,
362depending on your machine.
e6512bcf
RS
363@end defun
364
365@node Arithmetic Operations
366@section Arithmetic Operations
367
368 Emacs Lisp provides the traditional four arithmetic operations:
369addition, subtraction, multiplication, and division. Remainder and modulus
370functions supplement the division functions. The functions to
371add or subtract 1 are provided because they are traditional in Lisp and
372commonly used.
373
374 All of these functions except @code{%} return a floating point value
375if any argument is floating.
376
377 It is important to note that in GNU Emacs Lisp, arithmetic functions
22697dac
KH
378do not check for overflow. Thus @code{(1+ 134217727)} may evaluate to
379@minus{}134217728, depending on your hardware.
e6512bcf
RS
380
381@defun 1+ number-or-marker
382This function returns @var{number-or-marker} plus 1.
383For example,
384
385@example
386(setq foo 4)
387 @result{} 4
388(1+ foo)
389 @result{} 5
390@end example
391
bfe721d1
KH
392This function is not analogous to the C operator @code{++}---it does not
393increment a variable. It just computes a sum. Thus, if we continue,
e6512bcf
RS
394
395@example
396foo
397 @result{} 4
398@end example
399
400If you want to increment the variable, you must use @code{setq},
401like this:
402
403@example
404(setq foo (1+ foo))
405 @result{} 5
406@end example
407@end defun
408
409@defun 1- number-or-marker
410This function returns @var{number-or-marker} minus 1.
411@end defun
412
413@defun abs number
414This returns the absolute value of @var{number}.
415@end defun
416
417@defun + &rest numbers-or-markers
418This function adds its arguments together. When given no arguments,
bfe721d1 419@code{+} returns 0.
e6512bcf
RS
420
421@example
422(+)
423 @result{} 0
424(+ 1)
425 @result{} 1
426(+ 1 2 3 4)
427 @result{} 10
428@end example
429@end defun
430
431@defun - &optional number-or-marker &rest other-numbers-or-markers
432The @code{-} function serves two purposes: negation and subtraction.
433When @code{-} has a single argument, the value is the negative of the
434argument. When there are multiple arguments, @code{-} subtracts each of
435the @var{other-numbers-or-markers} from @var{number-or-marker},
bfe721d1 436cumulatively. If there are no arguments, the result is 0.
e6512bcf
RS
437
438@example
439(- 10 1 2 3 4)
440 @result{} 0
441(- 10)
442 @result{} -10
443(-)
444 @result{} 0
445@end example
446@end defun
447
448@defun * &rest numbers-or-markers
449This function multiplies its arguments together, and returns the
bfe721d1 450product. When given no arguments, @code{*} returns 1.
e6512bcf
RS
451
452@example
453(*)
454 @result{} 1
455(* 1)
456 @result{} 1
457(* 1 2 3 4)
458 @result{} 24
459@end example
460@end defun
461
462@defun / dividend divisor &rest divisors
05fd2b65 463This function divides @var{dividend} by @var{divisor} and returns the
e6512bcf
RS
464quotient. If there are additional arguments @var{divisors}, then it
465divides @var{dividend} by each divisor in turn. Each argument may be a
466number or a marker.
467
468If all the arguments are integers, then the result is an integer too.
469This means the result has to be rounded. On most machines, the result
470is rounded towards zero after each division, but some machines may round
471differently with negative arguments. This is because the Lisp function
472@code{/} is implemented using the C division operator, which also
473permits machine-dependent rounding. As a practical matter, all known
474machines round in the standard fashion.
475
476@cindex @code{arith-error} in division
477If you divide by 0, an @code{arith-error} error is signaled.
478(@xref{Errors}.)
479
480@example
bda144f4 481@group
e6512bcf
RS
482(/ 6 2)
483 @result{} 3
bda144f4 484@end group
e6512bcf
RS
485(/ 5 2)
486 @result{} 2
487(/ 25 3 2)
488 @result{} 4
489(/ -17 6)
490 @result{} -2
491@end example
492
493The result of @code{(/ -17 6)} could in principle be -3 on some
494machines.
495@end defun
496
497@defun % dividend divisor
498@cindex remainder
499This function returns the integer remainder after division of @var{dividend}
500by @var{divisor}. The arguments must be integers or markers.
501
502For negative arguments, the remainder is in principle machine-dependent
503since the quotient is; but in practice, all known machines behave alike.
504
505An @code{arith-error} results if @var{divisor} is 0.
506
507@example
508(% 9 4)
509 @result{} 1
510(% -9 4)
511 @result{} -1
512(% 9 -4)
513 @result{} 1
514(% -9 -4)
515 @result{} -1
516@end example
517
518For any two integers @var{dividend} and @var{divisor},
519
520@example
521@group
522(+ (% @var{dividend} @var{divisor})
523 (* (/ @var{dividend} @var{divisor}) @var{divisor}))
524@end group
525@end example
526
527@noindent
528always equals @var{dividend}.
529@end defun
530
531@defun mod dividend divisor
532@cindex modulus
533This function returns the value of @var{dividend} modulo @var{divisor};
534in other words, the remainder after division of @var{dividend}
535by @var{divisor}, but with the same sign as @var{divisor}.
536The arguments must be numbers or markers.
537
538Unlike @code{%}, @code{mod} returns a well-defined result for negative
539arguments. It also permits floating point arguments; it rounds the
540quotient downward (towards minus infinity) to an integer, and uses that
541quotient to compute the remainder.
542
543An @code{arith-error} results if @var{divisor} is 0.
544
545@example
bda144f4 546@group
e6512bcf
RS
547(mod 9 4)
548 @result{} 1
bda144f4
MW
549@end group
550@group
e6512bcf
RS
551(mod -9 4)
552 @result{} 3
bda144f4
MW
553@end group
554@group
e6512bcf
RS
555(mod 9 -4)
556 @result{} -3
bda144f4
MW
557@end group
558@group
e6512bcf
RS
559(mod -9 -4)
560 @result{} -1
bda144f4
MW
561@end group
562@group
e6512bcf
RS
563(mod 5.5 2.5)
564 @result{} .5
bda144f4 565@end group
e6512bcf
RS
566@end example
567
568For any two numbers @var{dividend} and @var{divisor},
569
570@example
571@group
572(+ (mod @var{dividend} @var{divisor})
573 (* (floor @var{dividend} @var{divisor}) @var{divisor}))
574@end group
575@end example
576
577@noindent
bfe721d1
KH
578always equals @var{dividend}, subject to rounding error if either
579argument is floating point. For @code{floor}, see @ref{Numeric
580Conversions}.
e6512bcf
RS
581@end defun
582
583@node Rounding Operations
584@section Rounding Operations
585@cindex rounding without conversion
586
bb61c6c6 587The functions @code{ffloor}, @code{fceiling}, @code{fround} and
e6512bcf
RS
588@code{ftruncate} take a floating point argument and return a floating
589point result whose value is a nearby integer. @code{ffloor} returns the
bb61c6c6 590nearest integer below; @code{fceiling}, the nearest integer above;
05fd2b65 591@code{ftruncate}, the nearest integer in the direction towards zero;
e6512bcf
RS
592@code{fround}, the nearest integer.
593
594@defun ffloor float
595This function rounds @var{float} to the next lower integral value, and
596returns that value as a floating point number.
597@end defun
598
bb61c6c6 599@defun fceiling float
e6512bcf
RS
600This function rounds @var{float} to the next higher integral value, and
601returns that value as a floating point number.
602@end defun
603
05fd2b65 604@defun ftruncate float
e6512bcf
RS
605This function rounds @var{float} towards zero to an integral value, and
606returns that value as a floating point number.
607@end defun
608
609@defun fround float
610This function rounds @var{float} to the nearest integral value,
611and returns that value as a floating point number.
612@end defun
613
614@node Bitwise Operations
615@section Bitwise Operations on Integers
616
617 In a computer, an integer is represented as a binary number, a
618sequence of @dfn{bits} (digits which are either zero or one). A bitwise
619operation acts on the individual bits of such a sequence. For example,
620@dfn{shifting} moves the whole sequence left or right one or more places,
621reproducing the same pattern ``moved over''.
622
623 The bitwise operations in Emacs Lisp apply only to integers.
624
625@defun lsh integer1 count
626@cindex logical shift
627@code{lsh}, which is an abbreviation for @dfn{logical shift}, shifts the
05fd2b65
RS
628bits in @var{integer1} to the left @var{count} places, or to the right
629if @var{count} is negative, bringing zeros into the vacated bits. If
630@var{count} is negative, @code{lsh} shifts zeros into the leftmost
631(most-significant) bit, producing a positive result even if
632@var{integer1} is negative. Contrast this with @code{ash}, below.
633
634Here are two examples of @code{lsh}, shifting a pattern of bits one
635place to the left. We show only the low-order eight bits of the binary
636pattern; the rest are all zero.
e6512bcf
RS
637
638@example
639@group
640(lsh 5 1)
641 @result{} 10
642;; @r{Decimal 5 becomes decimal 10.}
64300000101 @result{} 00001010
644
645(lsh 7 1)
646 @result{} 14
647;; @r{Decimal 7 becomes decimal 14.}
64800000111 @result{} 00001110
649@end group
650@end example
651
652@noindent
653As the examples illustrate, shifting the pattern of bits one place to
654the left produces a number that is twice the value of the previous
655number.
656
bfe721d1 657Shifting a pattern of bits two places to the left produces results
e6512bcf
RS
658like this (with 8-bit binary numbers):
659
660@example
661@group
662(lsh 3 2)
663 @result{} 12
664;; @r{Decimal 3 becomes decimal 12.}
66500000011 @result{} 00001100
666@end group
667@end example
668
bfe721d1 669On the other hand, shifting one place to the right looks like this:
e6512bcf
RS
670
671@example
672@group
673(lsh 6 -1)
674 @result{} 3
675;; @r{Decimal 6 becomes decimal 3.}
67600000110 @result{} 00000011
677@end group
678
679@group
680(lsh 5 -1)
681 @result{} 2
682;; @r{Decimal 5 becomes decimal 2.}
68300000101 @result{} 00000010
684@end group
685@end example
686
687@noindent
bfe721d1
KH
688As the example illustrates, shifting one place to the right divides the
689value of a positive integer by two, rounding downward.
690
691The function @code{lsh}, like all Emacs Lisp arithmetic functions, does
692not check for overflow, so shifting left can discard significant bits
693and change the sign of the number. For example, left shifting
694134,217,727 produces @minus{}2 on a 28-bit machine:
695
696@example
697(lsh 134217727 1) ; @r{left shift}
698 @result{} -2
699@end example
700
701In binary, in the 28-bit implementation, the argument looks like this:
702
703@example
704@group
cc8c51f1 705;; @r{Decimal 134,217,727}
bfe721d1
KH
7060111 1111 1111 1111 1111 1111 1111
707@end group
708@end example
709
710@noindent
711which becomes the following when left shifted:
712
713@example
714@group
715;; @r{Decimal @minus{}2}
7161111 1111 1111 1111 1111 1111 1110
717@end group
718@end example
e6512bcf
RS
719@end defun
720
721@defun ash integer1 count
722@cindex arithmetic shift
723@code{ash} (@dfn{arithmetic shift}) shifts the bits in @var{integer1}
724to the left @var{count} places, or to the right if @var{count}
725is negative.
726
727@code{ash} gives the same results as @code{lsh} except when
728@var{integer1} and @var{count} are both negative. In that case,
bfe721d1
KH
729@code{ash} puts ones in the empty bit positions on the left, while
730@code{lsh} puts zeros in those bit positions.
e6512bcf
RS
731
732Thus, with @code{ash}, shifting the pattern of bits one place to the right
733looks like this:
734
735@example
736@group
737(ash -6 -1) @result{} -3
738;; @r{Decimal @minus{}6 becomes decimal @minus{}3.}
8be5e0fc 7391111 1111 1111 1111 1111 1111 1010
e6512bcf 740 @result{}
8be5e0fc 7411111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
742@end group
743@end example
744
745In contrast, shifting the pattern of bits one place to the right with
746@code{lsh} looks like this:
747
748@example
749@group
8be5e0fc
RS
750(lsh -6 -1) @result{} 134217725
751;; @r{Decimal @minus{}6 becomes decimal 134,217,725.}
7521111 1111 1111 1111 1111 1111 1010
e6512bcf 753 @result{}
8be5e0fc 7540111 1111 1111 1111 1111 1111 1101
e6512bcf
RS
755@end group
756@end example
757
e6512bcf
RS
758Here are other examples:
759
760@c !!! Check if lined up in smallbook format! XDVI shows problem
761@c with smallbook but not with regular book! --rjc 16mar92
762@smallexample
763@group
8be5e0fc 764 ; @r{ 28-bit binary values}
e6512bcf 765
8be5e0fc
RS
766(lsh 5 2) ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
767 @result{} 20 ; = @r{0000 0000 0000 0000 0000 0001 0100}
e6512bcf
RS
768@end group
769@group
770(ash 5 2)
771 @result{} 20
8be5e0fc
RS
772(lsh -5 2) ; -5 = @r{1111 1111 1111 1111 1111 1111 1011}
773 @result{} -20 ; = @r{1111 1111 1111 1111 1111 1110 1100}
e6512bcf
RS
774(ash -5 2)
775 @result{} -20
776@end group
777@group
8be5e0fc
RS
778(lsh 5 -2) ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
779 @result{} 1 ; = @r{0000 0000 0000 0000 0000 0000 0001}
e6512bcf
RS
780@end group
781@group
782(ash 5 -2)
783 @result{} 1
784@end group
785@group
8be5e0fc
RS
786(lsh -5 -2) ; -5 = @r{1111 1111 1111 1111 1111 1111 1011}
787 @result{} 4194302 ; = @r{0011 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
788@end group
789@group
8be5e0fc
RS
790(ash -5 -2) ; -5 = @r{1111 1111 1111 1111 1111 1111 1011}
791 @result{} -2 ; = @r{1111 1111 1111 1111 1111 1111 1110}
e6512bcf
RS
792@end group
793@end smallexample
794@end defun
795
796@defun logand &rest ints-or-markers
797@cindex logical and
798@cindex bitwise and
799This function returns the ``logical and'' of the arguments: the
800@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
801set in all the arguments. (``Set'' means that the value of the bit is 1
802rather than 0.)
803
804For example, using 4-bit binary numbers, the ``logical and'' of 13 and
80512 is 12: 1101 combined with 1100 produces 1100.
e6512bcf
RS
806In both the binary numbers, the leftmost two bits are set (i.e., they
807are 1's), so the leftmost two bits of the returned value are set.
808However, for the rightmost two bits, each is zero in at least one of
809the arguments, so the rightmost two bits of the returned value are 0's.
810
811@noindent
812Therefore,
813
814@example
815@group
816(logand 13 12)
817 @result{} 12
818@end group
819@end example
820
821If @code{logand} is not passed any argument, it returns a value of
822@minus{}1. This number is an identity element for @code{logand}
823because its binary representation consists entirely of ones. If
824@code{logand} is passed just one argument, it returns that argument.
825
826@smallexample
827@group
8be5e0fc 828 ; @r{ 28-bit binary values}
e6512bcf 829
8be5e0fc
RS
830(logand 14 13) ; 14 = @r{0000 0000 0000 0000 0000 0000 1110}
831 ; 13 = @r{0000 0000 0000 0000 0000 0000 1101}
832 @result{} 12 ; 12 = @r{0000 0000 0000 0000 0000 0000 1100}
e6512bcf
RS
833@end group
834
835@group
8be5e0fc
RS
836(logand 14 13 4) ; 14 = @r{0000 0000 0000 0000 0000 0000 1110}
837 ; 13 = @r{0000 0000 0000 0000 0000 0000 1101}
838 ; 4 = @r{0000 0000 0000 0000 0000 0000 0100}
839 @result{} 4 ; 4 = @r{0000 0000 0000 0000 0000 0000 0100}
e6512bcf
RS
840@end group
841
842@group
843(logand)
8be5e0fc 844 @result{} -1 ; -1 = @r{1111 1111 1111 1111 1111 1111 1111}
e6512bcf
RS
845@end group
846@end smallexample
847@end defun
848
849@defun logior &rest ints-or-markers
850@cindex logical inclusive or
851@cindex bitwise or
852This function returns the ``inclusive or'' of its arguments: the @var{n}th bit
853is set in the result if, and only if, the @var{n}th bit is set in at least
854one of the arguments. If there are no arguments, the result is zero,
855which is an identity element for this operation. If @code{logior} is
856passed just one argument, it returns that argument.
857
858@smallexample
859@group
8be5e0fc 860 ; @r{ 28-bit binary values}
e6512bcf 861
8be5e0fc
RS
862(logior 12 5) ; 12 = @r{0000 0000 0000 0000 0000 0000 1100}
863 ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
864 @result{} 13 ; 13 = @r{0000 0000 0000 0000 0000 0000 1101}
e6512bcf
RS
865@end group
866
867@group
8be5e0fc
RS
868(logior 12 5 7) ; 12 = @r{0000 0000 0000 0000 0000 0000 1100}
869 ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
870 ; 7 = @r{0000 0000 0000 0000 0000 0000 0111}
871 @result{} 15 ; 15 = @r{0000 0000 0000 0000 0000 0000 1111}
e6512bcf
RS
872@end group
873@end smallexample
874@end defun
875
876@defun logxor &rest ints-or-markers
877@cindex bitwise exclusive or
878@cindex logical exclusive or
879This function returns the ``exclusive or'' of its arguments: the
05fd2b65
RS
880@var{n}th bit is set in the result if, and only if, the @var{n}th bit is
881set in an odd number of the arguments. If there are no arguments, the
882result is 0, which is an identity element for this operation. If
883@code{logxor} is passed just one argument, it returns that argument.
e6512bcf
RS
884
885@smallexample
886@group
8be5e0fc 887 ; @r{ 28-bit binary values}
e6512bcf 888
8be5e0fc
RS
889(logxor 12 5) ; 12 = @r{0000 0000 0000 0000 0000 0000 1100}
890 ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
891 @result{} 9 ; 9 = @r{0000 0000 0000 0000 0000 0000 1001}
e6512bcf
RS
892@end group
893
894@group
8be5e0fc
RS
895(logxor 12 5 7) ; 12 = @r{0000 0000 0000 0000 0000 0000 1100}
896 ; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
897 ; 7 = @r{0000 0000 0000 0000 0000 0000 0111}
898 @result{} 14 ; 14 = @r{0000 0000 0000 0000 0000 0000 1110}
e6512bcf
RS
899@end group
900@end smallexample
901@end defun
902
903@defun lognot integer
904@cindex logical not
905@cindex bitwise not
906This function returns the logical complement of its argument: the @var{n}th
907bit is one in the result if, and only if, the @var{n}th bit is zero in
908@var{integer}, and vice-versa.
909
910@example
911(lognot 5)
912 @result{} -6
8be5e0fc 913;; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
e6512bcf 914;; @r{becomes}
8be5e0fc 915;; -6 = @r{1111 1111 1111 1111 1111 1111 1010}
e6512bcf
RS
916@end example
917@end defun
918
4ac771a0
RS
919@node Math Functions
920@section Standard Mathematical Functions
e6512bcf
RS
921@cindex transcendental functions
922@cindex mathematical functions
923
924These mathematical functions are available if floating point is
925supported. They allow integers as well as floating point numbers
926as arguments.
927
928@defun sin arg
929@defunx cos arg
930@defunx tan arg
931These are the ordinary trigonometric functions, with argument measured
932in radians.
933@end defun
934
935@defun asin arg
05fd2b65
RS
936The value of @code{(asin @var{arg})} is a number between @minus{}pi/2
937and pi/2 (inclusive) whose sine is @var{arg}; if, however, @var{arg}
e6512bcf
RS
938is out of range (outside [-1, 1]), then the result is a NaN.
939@end defun
940
941@defun acos arg
942The value of @code{(acos @var{arg})} is a number between 0 and pi
943(inclusive) whose cosine is @var{arg}; if, however, @var{arg}
944is out of range (outside [-1, 1]), then the result is a NaN.
945@end defun
946
947@defun atan arg
05fd2b65
RS
948The value of @code{(atan @var{arg})} is a number between @minus{}pi/2
949and pi/2 (exclusive) whose tangent is @var{arg}.
e6512bcf
RS
950@end defun
951
952@defun exp arg
953This is the exponential function; it returns @i{e} to the power
954@var{arg}. @i{e} is a fundamental mathematical constant also called the
955base of natural logarithms.
956@end defun
957
958@defun log arg &optional base
959This function returns the logarithm of @var{arg}, with base @var{base}.
960If you don't specify @var{base}, the base @var{e} is used. If @var{arg}
961is negative, the result is a NaN.
962@end defun
963
964@ignore
965@defun expm1 arg
966This function returns @code{(1- (exp @var{arg}))}, but it is more
967accurate than that when @var{arg} is negative and @code{(exp @var{arg})}
968is close to 1.
969@end defun
970
971@defun log1p arg
972This function returns @code{(log (1+ @var{arg}))}, but it is more
973accurate than that when @var{arg} is so small that adding 1 to it would
974lose accuracy.
975@end defun
976@end ignore
977
978@defun log10 arg
979This function returns the logarithm of @var{arg}, with base 10. If
05fd2b65
RS
980@var{arg} is negative, the result is a NaN. @code{(log10 @var{x})}
981@equiv{} @code{(log @var{x} 10)}, at least approximately.
e6512bcf
RS
982@end defun
983
984@defun expt x y
8be5e0fc
RS
985This function returns @var{x} raised to power @var{y}. If both
986arguments are integers and @var{y} is positive, the result is an
987integer; in this case, it is truncated to fit the range of possible
988integer values.
e6512bcf
RS
989@end defun
990
991@defun sqrt arg
992This returns the square root of @var{arg}. If @var{arg} is negative,
993the value is a NaN.
994@end defun
995
996@node Random Numbers
997@section Random Numbers
998@cindex random numbers
999
1000A deterministic computer program cannot generate true random numbers.
1001For most purposes, @dfn{pseudo-random numbers} suffice. A series of
1002pseudo-random numbers is generated in a deterministic fashion. The
1003numbers are not truly random, but they have certain properties that
1004mimic a random series. For example, all possible values occur equally
1005often in a pseudo-random series.
1006
1007In Emacs, pseudo-random numbers are generated from a ``seed'' number.
1008Starting from any given seed, the @code{random} function always
1009generates the same sequence of numbers. Emacs always starts with the
1010same seed value, so the sequence of values of @code{random} is actually
1011the same in each Emacs run! For example, in one operating system, the
1012first call to @code{(random)} after you start Emacs always returns
1013-1457731, and the second one always returns -7692030. This
1014repeatability is helpful for debugging.
1015
1016If you want truly unpredictable random numbers, execute @code{(random
1017t)}. This chooses a new seed based on the current time of day and on
1018Emacs's process @sc{id} number.
1019
1020@defun random &optional limit
1021This function returns a pseudo-random integer. Repeated calls return a
1022series of pseudo-random integers.
1023
22697dac 1024If @var{limit} is a positive integer, the value is chosen to be
bfe721d1 1025nonnegative and less than @var{limit}.
e6512bcf
RS
1026
1027If @var{limit} is @code{t}, it means to choose a new seed based on the
1028current time of day and on Emacs's process @sc{id} number.
1029@c "Emacs'" is incorrect usage!
1030
1031On some machines, any integer representable in Lisp may be the result
1032of @code{random}. On other machines, the result can never be larger
1033than a certain maximum or less than a certain (negative) minimum.
1034@end defun