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