elisp: Arithmetic Operations

 
 3.6 Arithmetic Operations
 =========================
 
 Emacs Lisp provides the traditional four arithmetic operations
 (addition, subtraction, multiplication, and division), as well as
 remainder and modulus functions, and functions to add or subtract 1.
 Except for ‘%’, each of these functions accepts both integer and
 floating-point arguments, and returns a floating-point number if any
 argument is floating point.
 
    Emacs Lisp arithmetic functions do not check for integer overflow.
 Thus ‘(1+ 536870911)’ may evaluate to −536870912, depending on your
 hardware.
 
  -- Function: 1+ number-or-marker
      This function returns NUMBER-OR-MARKER plus 1.  For example,
 
           (setq foo 4)
                ⇒ 4
           (1+ foo)
                ⇒ 5
 
      This function is not analogous to the C operator ‘++’—it does not
      increment a variable.  It just computes a sum.  Thus, if we
      continue,
 
           foo
                ⇒ 4
 
      If you want to increment the variable, you must use ‘setq’, like
      this:
 
           (setq foo (1+ foo))
                ⇒ 5
 
  -- Function: 1- number-or-marker
      This function returns NUMBER-OR-MARKER minus 1.
 
  -- Function: + &rest numbers-or-markers
      This function adds its arguments together.  When given no
      arguments, ‘+’ returns 0.
 
           (+)
                ⇒ 0
           (+ 1)
                ⇒ 1
           (+ 1 2 3 4)
                ⇒ 10
 
  -- Function: - &optional number-or-marker &rest more-numbers-or-markers
      The ‘-’ function serves two purposes: negation and subtraction.
      When ‘-’ has a single argument, the value is the negative of the
      argument.  When there are multiple arguments, ‘-’ subtracts each of
      the MORE-NUMBERS-OR-MARKERS from NUMBER-OR-MARKER, cumulatively.
      If there are no arguments, the result is 0.
 
           (- 10 1 2 3 4)
                ⇒ 0
           (- 10)
                ⇒ -10
           (-)
                ⇒ 0
 
  -- Function: * &rest numbers-or-markers
      This function multiplies its arguments together, and returns the
      product.  When given no arguments, ‘*’ returns 1.
 
           (*)
                ⇒ 1
           (* 1)
                ⇒ 1
           (* 1 2 3 4)
                ⇒ 24
 
  -- Function: / number &rest divisors
      With one or more DIVISORS, this function divides NUMBER by each
      divisor in DIVISORS in turn, and returns the quotient.  With no
      DIVISORS, this function returns 1/NUMBER, i.e., the multiplicative
      inverse of NUMBER.  Each argument may be a number or a marker.
 
      If all the arguments are integers, the result is an integer,
      obtained by rounding the quotient towards zero after each division.
 
           (/ 6 2)
                ⇒ 3
           (/ 5 2)
                ⇒ 2
           (/ 5.0 2)
                ⇒ 2.5
           (/ 5 2.0)
                ⇒ 2.5
           (/ 5.0 2.0)
                ⇒ 2.5
           (/ 4.0)
                ⇒ 0.25
           (/ 4)
                ⇒ 0
           (/ 25 3 2)
                ⇒ 4
           (/ -17 6)
                ⇒ -2
 
      If you divide an integer by the integer 0, Emacs signals an
      ‘arith-error’ error (SeeErrors).  Floating-point division of a
      nonzero number by zero yields either positive or negative infinity
      (SeeFloat Basics).
 
  -- Function: % dividend divisor
      This function returns the integer remainder after division of
      DIVIDEND by DIVISOR.  The arguments must be integers or markers.
 
      For any two integers DIVIDEND and DIVISOR,
 
           (+ (% DIVIDEND DIVISOR)
              (* (/ DIVIDEND DIVISOR) DIVISOR))
 
      always equals DIVIDEND if DIVISOR is nonzero.
 
           (% 9 4)
                ⇒ 1
           (% -9 4)
                ⇒ -1
           (% 9 -4)
                ⇒ 1
           (% -9 -4)
                ⇒ -1
 
  -- Function: mod dividend divisor
      This function returns the value of DIVIDEND modulo DIVISOR; in
      other words, the remainder after division of DIVIDEND by DIVISOR,
      but with the same sign as DIVISOR.  The arguments must be numbers
      or markers.
 
      Unlike ‘%’, ‘mod’ permits floating-point arguments; it rounds the
      quotient downward (towards minus infinity) to an integer, and uses
      that quotient to compute the remainder.
 
      If DIVISOR is zero, ‘mod’ signals an ‘arith-error’ error if both
      arguments are integers, and returns a NaN otherwise.
 
           (mod 9 4)
                ⇒ 1
           (mod -9 4)
                ⇒ 3
           (mod 9 -4)
                ⇒ -3
           (mod -9 -4)
                ⇒ -1
           (mod 5.5 2.5)
                ⇒ .5
 
      For any two numbers DIVIDEND and DIVISOR,
 
           (+ (mod DIVIDEND DIVISOR)
              (* (floor DIVIDEND DIVISOR) DIVISOR))
 
      always equals DIVIDEND, subject to rounding error if either
      argument is floating point and to an ‘arith-error’ if DIVIDEND is
      an integer and DIVISOR is 0.  For ‘floor’, see SeeNumeric
      Conversions.