@@ -1,913 +1,913 @@
-\section{Arithmetic Operations}
-
-\begin{Introduction}{ARITHMETIC\_OPERATIONS}
-This section considers operations defined in REDUCE that concern numbers,
-or operators that can operate on numbers in addition, in most cases, to
-more general expressions.
-\end{Introduction}
-
-\begin{Operator}{ABS}
-\index{absolute value}
-The \name{abs} operator returns the absolute value of its argument.
-
-\begin{Syntax}
-\name{abs}\(\meta{expression}\)
-\end{Syntax}
-
-\meta{expression} can be any REDUCE scalar expression.
-
-\begin{Examples}
-abs(-a); & ABS(A) \\
-abs(-5); & 5 \\
-a := -10; & A := -10 \\
-abs(a); & 10 \\
-abs(-a); & 10
-\end{Examples}
-\begin{Comments}
-If the argument has had no numeric value assigned to it, such as an
-identifier or polynomial, \name{abs} returns an expression involving
-\name{abs} of its argument, doing as much simplification of the argument
-as it can, such as dropping any preceding minus sign.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Switch}{ADJPREC}
-\index{input}\index{precision}
-When a real number is input, it is normally truncated to the
-\nameref{precision} in
-effect at the time the number is read. If it is desired to keep the full
-precision of all numbers input, the switch \name{adjprec}
-(for \meta{adjust precision}) can be turned on. While on, \name{adjprec}
-will automatically increase the precision, when necessary, to match that
-of any integer or real input, and a message printed to inform the user of
-the precision increase.
-
-\begin{Examples}
-on rounded; \\
-1.23456789012345; & 1.23456789012 \\
-on adjprec; \\
-1.23456789012345; \\
-*** precision increased to 15 \\
-1.23456789012345
-\end{Examples}
-\end{Switch}
-
-
-\begin{Operator}{ARG}
-\index{complex}\index{polar angle}
-If \nameref{complex} and \nameref{rounded} are on, and {\em arg}
-evaluates to a complex number, \name{arg} returns the polar angle of {\em
-arg}, measured in radians. Otherwise an expression in {\em arg} is
-returned.
-
-\begin{Examples}
-arg(3+4i) & ARG(3 + 4*I) \\
-on rounded, complex; \\
-ws; & 0.927295218002 \\
-arg a; & ARG(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{CEILING}
-\index{integer}
-
-\begin{Syntax}
-\name{ceiling}\(\meta{expression}\)
-\end{Syntax}
-
-This operator returns the ceiling (i.e., the least integer greater than or
-equal to its argument) if its argument has a numerical value. For
-negative numbers, this is equivalent to \nameref{fix}. For non-numeric
-arguments, the value is an expression in the original operator.
-
-\begin{Examples}
-ceiling 3.4; & 4 \\
-fix 3.4; & 3 \\
-ceiling(-5.2); & -5 \\
-fix(-5.2); & -5 \\
-ceiling a; & CEILING(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{CHOOSE}
-\name{choose}(\meta{m},\meta{m}) returns the number of ways of choosing
-\meta{m} objects from a collection of \meta{n} distinct objects --- in other
-words the binomial coefficient. If \meta{m} and \meta{n} are not positive
-integers, or $m > n$, the expression is returned unchanged.
-than or equal to
-\begin{Examples}
-choose(2,3); & 3 \\
-choose(3,2); & CHOOSE(3,2) \\
-choose(a,b); & CHOOSE(A,B)
-\end{Examples}
-\end{Operator}
-
-
-\begin{Operator}{DEG2DMS}
-\index{degrees}\index{radians}
-\begin{Syntax}
-\name{deg2dms}\(\meta{expression}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{expression} is a real number, the
-operator \name{deg2dms} will interpret it as degrees, and convert it to a
-list containing the equivalent degrees, minutes and seconds. In all other
-cases, an expression in terms of the original operator is returned.
-
-\begin{Examples}
-deg2dms 60; & DEG2DMS(60) \\
-on rounded; \\
-ws; & \{60,0,0\} \\
-deg2dms 42.4; & \{42,23,60.0\} \\
-deg2dms a; & DEG2DMS(A)
-\end{Examples}
-
-\end{Operator}
-
-\begin{Operator}{DEG2RAD}
-\index{degrees}\index{radians}
-
-\begin{Syntax}
-\name{deg2rad}\(\meta{expression}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{expression} is a real number, the
-operator \name{deg2rad} will interpret it as degrees, and convert it to
-the equivalent radians. In all other cases, an expression in terms of the
-original operator is returned.
-
-\begin{Examples}
-deg2rad 60; & DEG2RAD(60) \\
-on rounded; \\
-ws; & 1.0471975512 \\
-deg2rad a; & DEG2RAD(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{DIFFERENCE}
-The \name{difference} operator may be used as either an infix or prefix binary
-subtraction operator. It is identical to \name{-} as a binary operator.
-
-\begin{Syntax}
-\name{difference}\(\meta{expression},\meta{expression}\) or
-
-\meta{expression} \name{difference} \meta{expression}
- \{\name{difference} \meta{expression}\}\optional
-\end{Syntax}
-
-\meta{expression} can be a number or any other valid REDUCE expression. Matrix
-expressions are allowed if they are of the same dimensions.
-
-\begin{Examples}
-
-difference(10,4); & 6 \\
-
-15 difference 5 difference 2; & 8 \\
-
-a difference b; & A - B
-
-\end{Examples}
-
-\begin{Comments}
-The \name{difference} operator is left associative, as shown in the second
-example above.
-
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{DILOG}
-\index{dilogarithm function}
-The \name{dilog} operator is known to the differentiation and integration
-operators, but has numeric value attached only at \name{dilog(0)}. Dilog is
-defined by
-\begin{TEX}
-\begin{displaymath}
- dilog(x) = -\int{{log(x)\,dx}\over{x-1}}
-\end{displaymath}
-\end{TEX}
-\begin{INFO}
- dilog(x) = -int(log(x),x)/(x-1)
-\end{INFO}
-\begin{Examples}
-df(dilog(x**2),x); & - \rfrac{2*LOG(X^{2})*X}{X^{2} - 1}\\
-
-int(dilog(x),x); & DILOG(X)*X - DILOG(X) + LOG(X)*X - X \\
-
-dilog(0); & \rfrac{PI^{2}}{6}
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{DMS2DEG}
-\index{degrees}\index{radians}
-
-\begin{Syntax}
-\name{dms2deg}\(\meta{list}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{list} is a list of three real numbers,
-the operator \name{dms2deg} will interpret the list as degrees, minutes
-and seconds and convert it to the equivalent degrees. In all other cases,
-an expression in terms of the original operator is returned.
-
-\begin{Examples}
-dms2deg \{42,3,7\}; & DMS2DEG(\{42,3,7\}) \\
-on rounded; \\
-ws; & 42.0519444444 \\
-dms2deg a; & DMS2DEG(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{DMS2RAD}
-\index{degrees}\index{radians}
-
-\begin{Syntax}
-\name{dms2rad}\(\meta{list}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{list} is a list of three real numbers,
-the operator \name{dms2rad} will interpret the list as degrees, minutes
-and seconds and convert it to the equivalent radians. In all other cases,
-an expression in terms of the original operator is returned.
-
-\begin{Examples}
-dms2rad \{42,3,7\}; & DMS2RAD(\{42,3,7\}) \\
-on rounded; \\
-ws; & 0.733944887421 \\
-dms2rad a; & DMS2RAD(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{FACTORIAL}
-\index{gamma}
-\begin{Syntax}
-\name{factorial}\(\meta{expression}\)
-\end{Syntax}
-
-If the argument of \name{factorial} is a positive integer or zero, its
-factorial is returned. Otherwise the result is expressed in terms of the
-original operator. For more general operations, the \nameref{gamma} operator
-is available in the \nameref{Special Function Package}.
-
-\begin{Examples}
-factorial 4; & 24 \\
-factorial 30 ; & 265252859812191058636308480000000 \\
-factorial(a) ; FACTORIAL(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{FIX}
-\index{integer}
-\begin{Syntax}
-\name{fix}\(\meta{expression}\)
-\end{Syntax}
-
-The operator \name{fix} returns the integer part of its argument, if that
-argument has a numerical value. For positive numbers, this is equivalent
-to \nameref{floor}, and, for negative numbers, \nameref{ceiling}. For
-non-numeric arguments, the value is an expression in the original operator.
-
-\begin{Examples}
-fix 3.4; & 3 \\
-floor 3.4; & 3 \\
-ceiling 3.4; & 4 \\
-fix(-5.2); & -5 \\
-floor(-5.2); & -6 \\
-ceiling(-5.2); & -5 \\
-fix(a); & FIX(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{FIXP}
-\index{integer}
-The \name{fixp} logical operator returns true if its argument is an integer.
-\begin{Syntax}
-\name{fixp}\(\meta{expression}\) or \name{fixp} \meta{simple\_expression}
-\end{Syntax}
-
-\meta{expression} can be any valid REDUCE expression, \meta{simple\_expression}
-must be a single identifier or begin with a prefix operator.
-
-\begin{Examples}
-if fixp 1.5 then write "ok" else write "not";
- & not \\
-if fixp(a) then write "ok" else write "not";
- & not \\
-a := 15; & A := 15 \\
-if fixp(a) then write "ok" else write "not";
- & ok
-\end{Examples}
-
-\begin{Comments}
-Logical operators can only be used inside conditional expressions such as
-\name{if}\ldots\name{then} or \name{while}\ldots\name{do}.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{FLOOR}
-\index{integer}
-
-\begin{Syntax}
-\name{floor}\(\meta{expression}\)
-\end{Syntax}
-
-This operator returns the floor (i.e., the greatest integer less than or
-equal to its argument) if its argument has a numerical value. For
-positive numbers, this is equivalent to \nameref{fix}. For non-numeric
-arguments, the value is an expression in the original operator.
-
-\begin{Examples}
-floor 3.4; & 3 \\
-fix 3.4; & 3 \\
-floor(-5.2); & -6 \\
-fix(-5.2); & -5 \\
-floor a; & FLOOR(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{EXPT}
-The \name{expt} operator is both an infix and prefix binary exponentiation
-operator. It is identical to \name{^} or \name{**}.
-\begin{Syntax}
-\name{expt}\(\meta{expression},\meta{expression}\)
- or \meta{expression} \name{expt} \meta{expression}
-\end{Syntax}
-\begin{Examples}
-a expt b; & A^{B} \\
-expt(a,b); & A^{B} \\
-(x+y) expt 4; & X^{4} + 4*X^{3}*Y + 6*X^{2}*Y^{2} + 4*X*Y^{3} + Y^{4}
-\end{Examples}
-\begin{Comments}
-Scalar expressions may be raised to fractional and floating-point powers.
-Square matrix expressions may be raised to positive powers, and also to
-negative powers if non-singular.
-
-\name{expt} is left associative. In other words, \name{a expt b expt c} is
-equivalent to \name{a expt (b*c)}, not \name{a expt (b expt c)}, which
-would be right associative.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{GCD}
-\index{greatest common divisor}\index{polynomial}
-The \name{gcd} operator returns the greatest common divisor of two
-polynomials.
-\begin{Syntax}
-\name{gcd}\(\meta{expression},\meta{expression}\)
-\end{Syntax}
-\meta{expression} must be a polynomial (or integer), otherwise an error
-occurs.
-
-\begin{Examples}
-gcd(2*x**2 - 2*y**2,4*x + 4*y); & 2*(X + Y) \\
-gcd(sin(x),x**2 + 1); & 1 \\
-gcd(765,68); & 17
-\end{Examples}
-
-\begin{Comments}
-The operator \name{gcd} described here provides an explicit means to find the
-gcd of two expressions. The switch \name{gcd} described below simplifies
-expressions by finding and canceling gcd's at every opportunity. When
-the switch \nameref{ezgcd} is also on, gcd's are figured using the EZ GCD
-algorithm, which is usually faster.
-%%% The \nameref{heugcd} switch is also available, providing
-%%% gcd's by the Heuristic algorithm.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{LN}
-\index{logarithm}
-\begin{Syntax}
-\name{ln}\(\meta{expression}\)
-\end{Syntax}
-\meta{expression} can be any valid scalar REDUCE expression.
-
-The \name{ln} operator returns the natural logarithm of its argument.
-However, unlike \nameref{log}, there are no algebraic rules associated
-with it; it will only evaluate when \nameref{rounded} is on, and the
-argument is a real number.
-
-\begin{Examples}
-ln(x); & LN(X) \\
-ln 4; & LN(4) \\
-ln(e); & LN(E) \\
-df(ln(x),x); & DF(LN(X),X) \\
-on rounded; \\
-ln 4; & 1.38629436112 \\
-ln e; & 1
-\end{Examples}
-
-\begin{Comments}
-Because of the restricted algebraic properties of \name{ln}, users are
-advised to use \nameref{log} whenever possible.
-\end{Comments}
-
-\end{Operator}
-
-
-\begin{Operator}{LOG}
-\index{logarithm}
-The \name{log} operator returns the natural logarithm of its argument.
-\begin{Syntax}
-\name{log}\(\meta{expression}\) or \name{log} \meta{expression}
-\end{Syntax}
-
-\meta{expression} can be any valid scalar REDUCE expression.
-
-\begin{Examples}
-log(x); & LOG(X) \\
-log 4; & LOG(4) \\
-log(e); & 1 \\
-on rounded; \\
-log 4; & 1.38629436112
-\end{Examples}
-
-\begin{Comments}
-\name{log} returns a numeric value only when \nameref{rounded} is on. In that
-case, use of a negative argument for \name{log} results in an error
-message. No error is given on a negative argument when REDUCE is not in
-that mode.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{LOGB}
-\index{logarithm}
-\begin{Syntax}
-\name{logb}\(\meta{expression}\,\meta{integer}\)
-\end{Syntax}
-\meta{expression} can be any valid scalar REDUCE expression.
-
-The \name{logb} operator returns the logarithm of its first argument using
-the second argument as base. However, unlike \nameref{log}, there are no
-algebraic rules associated with it; it will only evaluate when
-\nameref{rounded} is on, and the first argument is a real number.
-
-\begin{Examples}
-logb(x,2); & LOGB(X,2) \\
-logb(4,3); & LOGB(4,3) \\
-logb(2,2); & LOGB(2,2) \\
-df(logb(x,3),x); & DF(LOGB(X,3),X) \\
-on rounded; \\
-logb(4,3); & 1.26185950714 \\
-logb(2,2); & 1
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{MAX}
-\index{maximum}
-The operator \name{max} is an n-ary prefix operator, which returns the largest
-value in its arguments.
-\begin{Syntax}
-\name{max}\(\meta{expression}\{,\meta{expression}\}\optional\)
-
-\end{Syntax}
-
-\meta{expression} must evaluate to a number. \name{max} of an empty list
-returns 0.
-
-\begin{Examples}
-max(4,6,10,-1); & 10 \\
-<>;
- & 46 \\
-max(-5,-10,-a); & -5
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{MIN}
-\index{minimum}
-The operator \name{min} is an n-ary prefix operator, which returns the
-smallest value in its arguments.
-\begin{Syntax}
-\name{min}\(\meta{expression}\{,\meta{expression}\}\optional\)
-\end{Syntax}
-
-\meta{expression} must evaluate to a number. \name{min} of an empty list
-returns 0.
-\begin{Examples}
-min(-3,0,17,2); & -3 \\
-<>;
- & 16 \\
-min(5,10,a); & 5
-\end{Examples}
-\end{Operator}
-
-
-\begin{Operator}{MINUS}
-The \name{minus} operator is a unary minus, returning the negative of its
-argument. It is equivalent to the unary \name{-}.
-\begin{Syntax}
-\name{minus}\(\meta{expression}\)
-
-
-\end{Syntax}
-
-\meta{expression} may be any scalar REDUCE expression.
-
-\begin{Examples}
-minus(a); & - A \\
-minus(-1); & 1 \\
-minus((x+1)**4); & - (X^{4} + 4*X^{3} + 6*X^{2} + 4*X + 1)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{NEXTPRIME}
-\index{prime number}
-\begin{Syntax}
-\name{nextprime}\(\meta{expression}\)
-\end{Syntax}
-
-If the argument of \name{nextprime} is an integer, the least prime greater
-than that argument is returned. Otherwise, a type error results.
-
-\begin{Examples}
-nextprime 5001; & 5003 \\
-nextprime(10^30); & 1000000000000000000000000000057 \\
-nextprime a; & ***** A invalid as integer
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Switch}{NOCONVERT}
-Under normal circumstances when \name{rounded} is on, \REDUCE\ converts the
-number 1.0 to the integer 1. If this is not desired, the switch
-\name{noconvert} can be turned on.
-\begin{Examples}
-on rounded; \\
-1.0000000000001; & 1 \\
-on noconvert; \\
-1.0000000000001; & 1.0 \\
-\end{Examples}
-\end{Switch}
-
-\begin{Operator}{NORM}
-\index{complex}
-\begin{Syntax}
-\name{norm}\(\meta{expression}\)
-\end{Syntax}
-
-If \name{rounded} is on, and the argument is a real number, \meta{norm}
-returns its absolute value. If \name{complex} is also on, \meta{norm}
-returns the square root of the sum of squares of the real and imaginary
-parts of the argument. In all other cases, a result is returned in
-terms of the original operator.
-
-\begin{Examples}
-norm (-2); & NORM(-2) \\
-on rounded;\\
-ws; & 2.0 \\
-norm(3+4i); & NORM(4*I+3) \\
-on complex;\\
-ws; & 5.0\\
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{PERM}
-\index{permutation}
-\begin{Syntax}
-perm(\meta{expression1},\meta{expression2})
-\end{Syntax}
-
-If \meta{expression1} and \meta{expression2} evaluate to positive integers,
-\name{perm} returns the number of permutations possible in selecting
-\meta{expression1} objects from \meta{expression2} objects.
-In other cases, an expression in the original operator is returned.
-
-\begin{Examples}
-perm(1,1); & 1 \\
-perm(3,5); & 60 \\
-perm(-3,5); & PERM(-3,5) \\
-perm(a,b); & PERM(A,B)
-\end{Examples}
-
-\end{Operator}
-
-\begin{Operator}{PLUS}
-The \name{plus} operator is both an infix and prefix n-ary addition
-operator. It exists because of the way in which {\REDUCE} handles such
-operators internally, and is not recommended for use in algebraic mode
-programming. \nameref{plussign}, which has the identical effect, should be
-used instead.
-\begin{Syntax}
-\name{plus}\(\meta{expression},\meta{expression}\{,\meta{expression}\}
-\optional\) or \\
- \meta{expression} \name{plus} \meta{expression} \{\name{plus} \meta{expression}\}\optional
-\end{Syntax}
-
-\meta{expression} can be any valid REDUCE expression, including matrix
-expressions of the same dimensions.
-
-\begin{Examples}
-a plus b plus c plus d; & A + B + C + D \\
-4.5 plus 10; & \rfrac{29}{2} \\\\
-plus(x**2,y**2); & X^{2} + Y^{2}
-\end{Examples}
-\end{Operator}
-
-
-\begin{Operator}{QUOTIENT}
-The \name{quotient} operator is both an infix and prefix binary operator that
-returns the quotient of its first argument divided by its second. It is
-also a unary \nameref{recip}rocal operator. It is identical to \name{/} and
-\nameref{slash}.
-\begin{Syntax}
-\name{quotient}\(\meta{expression},\meta{expression}\) or
-\meta{expression} \name{quotient} \meta{expression} or
-\name{quotient}\(\meta{expression}\) or
-\name{quotient} \meta{expression}
-\end{Syntax}
-
-\meta{expression} can be any valid REDUCE scalar expression. Matrix
-expressions can also be used if the second expression is invertible and the
-matrices are of the correct dimensions.
-\begin{Examples}
-quotient(a,x+1); & \rfrac{A}{X + 1} \\
-7 quotient 17; & \rfrac{7}{17} \\
-on rounded; \\
-4.5 quotient 2; & 2.25 \\
-quotient(x**2 + 3*x + 2,x+1); & X + 2 \\
-matrix m,inverse; \\
-m := mat((a,b),(c,d)); & \begin{multilineoutput}{6cm}
-M(1,1) := A;
-M(1,2) := B;
-M(2,1) := C
-M(2,2) := D
-\end{multilineoutput}\\
-
-inverse := quotient m; & \begin{multilineoutput}{8cm}
-INVERSE(1,1) := \rfrac{D}{A*D - B*C}
-INVERSE(1,2) := - \rfrac{B}{A*D - B*C}
-INVERSE(2,1) := - \rfrac{C}{A*D - B*C}
-INVERSE(2,2) := \rfrac{A}{A*D - B*C}
-\end{multilineoutput}
-
-\end{Examples}
-
-\begin{Comments}
-The \name{quotient} operator is left associative: \name{a quotient b quotient c}
-is equivalent to \name{(a quotient b) quotient c}.
-
-If a matrix argument to the unary \name{quotient} is not invertible, or if the
-second matrix argument to the binary quotient is not invertible, an error
-message is given.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{RAD2DEG}
-\index{degrees}\index{radians}
-\begin{Syntax}
-\name{rad2deg}\(\meta{expression}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{expression} is a real number, the
-operator \name{rad2deg} will interpret it as radians, and convert it to
-the equivalent degrees. In all other cases, an expression in terms of the
-original operator is returned.
-
-\begin{Examples}
-rad2deg 1; & RAD2DEG(1) \\
-on rounded; \\
-ws; & 57.2957795131 \\
-rad2deg a; & RAD2DEG(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{RAD2DMS}
-\index{degrees}\index{radians}
-
-\begin{Syntax}
-\name{rad2dms}\(\meta{expression}\)
-\end{Syntax}
-
-In \nameref{rounded} mode, if \meta{expression} is a real number, the
-operator \name{rad2dms} will interpret it as radians, and convert it to a
-list containing the equivalent degrees, minutes and seconds. In all other
-cases, an expression in terms of the original operator is returned.
-
-\begin{Examples}
-rad2dms 1; & RAD2DMS(1) \\
-on rounded; \\
-ws; & \{57,17,44.8062470964\} \\
-rad2dms a; & RAD2DMS(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{RECIP}
-\name{recip} is the alphabetical name for the division operator \name{/}
-or \nameref{slash} used as a unary operator. The use of \name{/} is preferred.
-
-\begin{Examples}
-recip a; & \rfrac{1}{A} \\
-recip 2; & \rfrac{1}{2}
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Operator}{REMAINDER}
-\index{polynomial}
-The \name{remainder} operator returns the remainder after its first
-argument is divided by its second argument.
-
-\begin{Syntax}
-\name{remainder}\(\meta{expression},\meta{expression}\)
-\end{Syntax}
-
-\meta{expression} can be any valid REDUCE polynomial, and is not limited
-to numeric values.
-
-\begin{Examples}
-remainder(13,6); & 1 \\
-remainder(x**2 + 3*x + 2,x+1); & 0 \\
-remainder(x**3 + 12*x + 4,x**2 + 1); & 11*X + 4 \\
-remainder(sin(2*x),x*y); & SIN(2*X)
-\end{Examples}
-
-\begin{Comments}
-In the default case, remainders are calculated over the integers. If you
-need the remainder with respect to another domain, it must be declared
-explicitly.
-
-If the first argument to \name{remainder} contains a denominator not equal to
-1, an error occurs.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{ROUND}
-\index{integer}
-
-\begin{Syntax}
-\name{round}\(\meta{expression}\)
-\end{Syntax}
-
-If its argument has a numerical value, \name{round} rounds it to the
-nearest integer. For non-numeric arguments, the value is an expression in
-the original operator.
-
-\begin{Examples}
-round 3.4; & 3 \\
-round 3.5; & 4 \\
-round a; & ROUND(A)
-\end{Examples}
-
-\end{Operator}
-
-
-\begin{Command}{SETMOD}
-\index{modular}
-The \name{setmod} command sets the modulus value for subsequent \nameref{modular}
-arithmetic.
-\begin{Syntax}
-\name{setmod} \meta{integer}
-\end{Syntax}
-
-\meta{integer} must be positive, and greater than 1. It need not be a prime
-number.
-
-\begin{Examples}
-setmod 6; & 1 \\
-on modular; \\
-16; & 4 \\
-x^2 + 5x + 7; & X^{2} + 5*X + 1 \\
-x/3; & \rfrac{X}{3} \\
-setmod 2; & 6 \\
-(x+1)^4; & X^{4} + 1 \\
-x/3; & X
-\end{Examples}
-\begin{Comments}
-\name{setmod} returns the previous modulus, or 1 if none has been set
-before. \name{setmod} only has effect when \nameref{modular} is on.
-
-Modular operations are done only on numbers such as coefficients of
-polynomials, not on the exponents. The modulus need not be prime.
-Attempts to divide by a power of the modulus produces an error message, since the
-operation is equivalent to dividing by 0. However, dividing by a factor
-of a non-prime modulus does not produce an error message.
-\end{Comments}
-\end{Command}
-
-
-\begin{Operator}{SIGN}
-
-\begin{Syntax}
-\name{sign} \meta{expression}
-\end{Syntax}
-
-\name{sign} tries to evaluate the sign of its argument. If this
-is possible \name{sign} returns one of 1, 0 or -1. Otherwise, the result
-is the original form or a simplified variant.
-
-\begin{Examples}
- sign(-5) & -1\\
- sign(-a^2*b) & -SIGN(B)\\
-\end{Examples}
-
-\begin{Comments}
-Even powers of formal expressions are assumed to be positive only as long
-as the switch \nameref{complex} is off.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{SQRT}
-\index{square root}
-The \name{sqrt} operator returns the square root of its argument.
-\begin{Syntax}
-\name{sqrt}\(\meta{expression}\)
-\end{Syntax}
-
-\meta{expression} can be any REDUCE scalar expression.
-
-\begin{Examples}
-sqrt(16*a^3); & 4*SQRT(A)*A \\
-sqrt(17); & SQRT(17) \\
-on rounded; \\
-sqrt(17); & 4.12310562562 \\
-off rounded; \\
-sqrt(a*b*c^5*d^3*27); &
- 3*SQRT(D)*SQRT(C)*SQRT(B)*SQRT(A)*SQRT(3)*C^{2}*D
-\end{Examples}
-\begin{Comments}
-\name{sqrt} checks its argument for squared factors and removes them.
-% If the \name{reduced} switch is on, square roots of a product become a
-% product of square roots.
-
-Numeric values for square roots that are not exact integers are given only
-when \nameref{rounded} is on.
-
-Please note that \name{sqrt(a**2)} is given as \name{a}, which may be
-incorrect if \name{a} eventually has a negative value. If you are
-programming a calculation in which this is a concern, you can turn on the
-\nameref{precise} switch, which causes the absolute value of the square root
-to be returned.
-\end{Comments}
-\end{Operator}
-
-
-\begin{Operator}{TIMES}
-The \name{times} operator is an infix or prefix n-ary multiplication
-operator. It is identical to \name{*}.
-\begin{Syntax}
-\meta{expression} \name{times} \meta{expression} \{\name{times} \meta{expression}\}\optional
-
- or \name{times}\(\meta{expression},\meta{expression} \{,\meta{expression}\}\optional\)
-\end{Syntax}
-
-\meta{expression} can be any valid REDUCE scalar or matrix expression.
-Matrix expressions must be of the correct dimensions. Compatible scalar
-and matrix expressions can be mixed.
-
-\begin{Examples}
-var1 times var2; & VAR1*VAR2 \\
-times(6,5); & 30 \\
-matrix aa,bb; \\
-aa := mat((1),(2),(x))\$ \\
-bb := mat((0,3,1))\$ \\
-aa times bb times 5; &
-\begin{multilineoutput}{6cm}
-[0 15 5 ]
-[ ]
-[0 30 10 ]
-[ ]
-[0 15*X 5*X]
-\end{multilineoutput}
-\end{Examples}
-\end{Operator}
-
+\section{Arithmetic Operations}
+
+\begin{Introduction}{ARITHMETIC\_OPERATIONS}
+This section considers operations defined in REDUCE that concern numbers,
+or operators that can operate on numbers in addition, in most cases, to
+more general expressions.
+\end{Introduction}
+
+\begin{Operator}{ABS}
+\index{absolute value}
+The \name{abs} operator returns the absolute value of its argument.
+
+\begin{Syntax}
+\name{abs}\(\meta{expression}\)
+\end{Syntax}
+
+\meta{expression} can be any REDUCE scalar expression.
+
+\begin{Examples}
+abs(-a); & ABS(A) \\
+abs(-5); & 5 \\
+a := -10; & A := -10 \\
+abs(a); & 10 \\
+abs(-a); & 10
+\end{Examples}
+\begin{Comments}
+If the argument has had no numeric value assigned to it, such as an
+identifier or polynomial, \name{abs} returns an expression involving
+\name{abs} of its argument, doing as much simplification of the argument
+as it can, such as dropping any preceding minus sign.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Switch}{ADJPREC}
+\index{input}\index{precision}
+When a real number is input, it is normally truncated to the
+\nameref{precision} in
+effect at the time the number is read. If it is desired to keep the full
+precision of all numbers input, the switch \name{adjprec}
+(for \meta{adjust precision}) can be turned on. While on, \name{adjprec}
+will automatically increase the precision, when necessary, to match that
+of any integer or real input, and a message printed to inform the user of
+the precision increase.
+
+\begin{Examples}
+on rounded; \\
+1.23456789012345; & 1.23456789012 \\
+on adjprec; \\
+1.23456789012345; \\
+*** precision increased to 15 \\
+1.23456789012345
+\end{Examples}
+\end{Switch}
+
+
+\begin{Operator}{ARG}
+\index{complex}\index{polar angle}
+If \nameref{complex} and \nameref{rounded} are on, and {\em arg}
+evaluates to a complex number, \name{arg} returns the polar angle of {\em
+arg}, measured in radians. Otherwise an expression in {\em arg} is
+returned.
+
+\begin{Examples}
+arg(3+4i) & ARG(3 + 4*I) \\
+on rounded, complex; \\
+ws; & 0.927295218002 \\
+arg a; & ARG(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{CEILING}
+\index{integer}
+
+\begin{Syntax}
+\name{ceiling}\(\meta{expression}\)
+\end{Syntax}
+
+This operator returns the ceiling (i.e., the least integer greater than or
+equal to its argument) if its argument has a numerical value. For
+negative numbers, this is equivalent to \nameref{fix}. For non-numeric
+arguments, the value is an expression in the original operator.
+
+\begin{Examples}
+ceiling 3.4; & 4 \\
+fix 3.4; & 3 \\
+ceiling(-5.2); & -5 \\
+fix(-5.2); & -5 \\
+ceiling a; & CEILING(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{CHOOSE}
+\name{choose}(\meta{m},\meta{m}) returns the number of ways of choosing
+\meta{m} objects from a collection of \meta{n} distinct objects --- in other
+words the binomial coefficient. If \meta{m} and \meta{n} are not positive
+integers, or $m > n$, the expression is returned unchanged.
+than or equal to
+\begin{Examples}
+choose(2,3); & 3 \\
+choose(3,2); & CHOOSE(3,2) \\
+choose(a,b); & CHOOSE(A,B)
+\end{Examples}
+\end{Operator}
+
+
+\begin{Operator}{DEG2DMS}
+\index{degrees}\index{radians}
+\begin{Syntax}
+\name{deg2dms}\(\meta{expression}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{expression} is a real number, the
+operator \name{deg2dms} will interpret it as degrees, and convert it to a
+list containing the equivalent degrees, minutes and seconds. In all other
+cases, an expression in terms of the original operator is returned.
+
+\begin{Examples}
+deg2dms 60; & DEG2DMS(60) \\
+on rounded; \\
+ws; & \{60,0,0\} \\
+deg2dms 42.4; & \{42,23,60.0\} \\
+deg2dms a; & DEG2DMS(A)
+\end{Examples}
+
+\end{Operator}
+
+\begin{Operator}{DEG2RAD}
+\index{degrees}\index{radians}
+
+\begin{Syntax}
+\name{deg2rad}\(\meta{expression}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{expression} is a real number, the
+operator \name{deg2rad} will interpret it as degrees, and convert it to
+the equivalent radians. In all other cases, an expression in terms of the
+original operator is returned.
+
+\begin{Examples}
+deg2rad 60; & DEG2RAD(60) \\
+on rounded; \\
+ws; & 1.0471975512 \\
+deg2rad a; & DEG2RAD(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{DIFFERENCE}
+The \name{difference} operator may be used as either an infix or prefix binary
+subtraction operator. It is identical to \name{-} as a binary operator.
+
+\begin{Syntax}
+\name{difference}\(\meta{expression},\meta{expression}\) or
+
+\meta{expression} \name{difference} \meta{expression}
+ \{\name{difference} \meta{expression}\}\optional
+\end{Syntax}
+
+\meta{expression} can be a number or any other valid REDUCE expression. Matrix
+expressions are allowed if they are of the same dimensions.
+
+\begin{Examples}
+
+difference(10,4); & 6 \\
+
+15 difference 5 difference 2; & 8 \\
+
+a difference b; & A - B
+
+\end{Examples}
+
+\begin{Comments}
+The \name{difference} operator is left associative, as shown in the second
+example above.
+
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{DILOG}
+\index{dilogarithm function}
+The \name{dilog} operator is known to the differentiation and integration
+operators, but has numeric value attached only at \name{dilog(0)}. Dilog is
+defined by
+\begin{TEX}
+\begin{displaymath}
+ dilog(x) = -\int{{log(x)\,dx}\over{x-1}}
+\end{displaymath}
+\end{TEX}
+\begin{INFO}
+ dilog(x) = -int(log(x),x)/(x-1)
+\end{INFO}
+\begin{Examples}
+df(dilog(x**2),x); & - \rfrac{2*LOG(X^{2})*X}{X^{2} - 1}\\
+
+int(dilog(x),x); & DILOG(X)*X - DILOG(X) + LOG(X)*X - X \\
+
+dilog(0); & \rfrac{PI^{2}}{6}
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{DMS2DEG}
+\index{degrees}\index{radians}
+
+\begin{Syntax}
+\name{dms2deg}\(\meta{list}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{list} is a list of three real numbers,
+the operator \name{dms2deg} will interpret the list as degrees, minutes
+and seconds and convert it to the equivalent degrees. In all other cases,
+an expression in terms of the original operator is returned.
+
+\begin{Examples}
+dms2deg \{42,3,7\}; & DMS2DEG(\{42,3,7\}) \\
+on rounded; \\
+ws; & 42.0519444444 \\
+dms2deg a; & DMS2DEG(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{DMS2RAD}
+\index{degrees}\index{radians}
+
+\begin{Syntax}
+\name{dms2rad}\(\meta{list}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{list} is a list of three real numbers,
+the operator \name{dms2rad} will interpret the list as degrees, minutes
+and seconds and convert it to the equivalent radians. In all other cases,
+an expression in terms of the original operator is returned.
+
+\begin{Examples}
+dms2rad \{42,3,7\}; & DMS2RAD(\{42,3,7\}) \\
+on rounded; \\
+ws; & 0.733944887421 \\
+dms2rad a; & DMS2RAD(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{FACTORIAL}
+\index{gamma}
+\begin{Syntax}
+\name{factorial}\(\meta{expression}\)
+\end{Syntax}
+
+If the argument of \name{factorial} is a positive integer or zero, its
+factorial is returned. Otherwise the result is expressed in terms of the
+original operator. For more general operations, the \nameref{gamma} operator
+is available in the \nameref{Special Function Package}.
+
+\begin{Examples}
+factorial 4; & 24 \\
+factorial 30 ; & 265252859812191058636308480000000 \\
+factorial(a) ; FACTORIAL(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{FIX}
+\index{integer}
+\begin{Syntax}
+\name{fix}\(\meta{expression}\)
+\end{Syntax}
+
+The operator \name{fix} returns the integer part of its argument, if that
+argument has a numerical value. For positive numbers, this is equivalent
+to \nameref{floor}, and, for negative numbers, \nameref{ceiling}. For
+non-numeric arguments, the value is an expression in the original operator.
+
+\begin{Examples}
+fix 3.4; & 3 \\
+floor 3.4; & 3 \\
+ceiling 3.4; & 4 \\
+fix(-5.2); & -5 \\
+floor(-5.2); & -6 \\
+ceiling(-5.2); & -5 \\
+fix(a); & FIX(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{FIXP}
+\index{integer}
+The \name{fixp} logical operator returns true if its argument is an integer.
+\begin{Syntax}
+\name{fixp}\(\meta{expression}\) or \name{fixp} \meta{simple\_expression}
+\end{Syntax}
+
+\meta{expression} can be any valid REDUCE expression, \meta{simple\_expression}
+must be a single identifier or begin with a prefix operator.
+
+\begin{Examples}
+if fixp 1.5 then write "ok" else write "not";
+ & not \\
+if fixp(a) then write "ok" else write "not";
+ & not \\
+a := 15; & A := 15 \\
+if fixp(a) then write "ok" else write "not";
+ & ok
+\end{Examples}
+
+\begin{Comments}
+Logical operators can only be used inside conditional expressions such as
+\name{if}\ldots\name{then} or \name{while}\ldots\name{do}.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{FLOOR}
+\index{integer}
+
+\begin{Syntax}
+\name{floor}\(\meta{expression}\)
+\end{Syntax}
+
+This operator returns the floor (i.e., the greatest integer less than or
+equal to its argument) if its argument has a numerical value. For
+positive numbers, this is equivalent to \nameref{fix}. For non-numeric
+arguments, the value is an expression in the original operator.
+
+\begin{Examples}
+floor 3.4; & 3 \\
+fix 3.4; & 3 \\
+floor(-5.2); & -6 \\
+fix(-5.2); & -5 \\
+floor a; & FLOOR(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{EXPT}
+The \name{expt} operator is both an infix and prefix binary exponentiation
+operator. It is identical to \name{^} or \name{**}.
+\begin{Syntax}
+\name{expt}\(\meta{expression},\meta{expression}\)
+ or \meta{expression} \name{expt} \meta{expression}
+\end{Syntax}
+\begin{Examples}
+a expt b; & A^{B} \\
+expt(a,b); & A^{B} \\
+(x+y) expt 4; & X^{4} + 4*X^{3}*Y + 6*X^{2}*Y^{2} + 4*X*Y^{3} + Y^{4}
+\end{Examples}
+\begin{Comments}
+Scalar expressions may be raised to fractional and floating-point powers.
+Square matrix expressions may be raised to positive powers, and also to
+negative powers if non-singular.
+
+\name{expt} is left associative. In other words, \name{a expt b expt c} is
+equivalent to \name{a expt (b*c)}, not \name{a expt (b expt c)}, which
+would be right associative.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{GCD}
+\index{greatest common divisor}\index{polynomial}
+The \name{gcd} operator returns the greatest common divisor of two
+polynomials.
+\begin{Syntax}
+\name{gcd}\(\meta{expression},\meta{expression}\)
+\end{Syntax}
+\meta{expression} must be a polynomial (or integer), otherwise an error
+occurs.
+
+\begin{Examples}
+gcd(2*x**2 - 2*y**2,4*x + 4*y); & 2*(X + Y) \\
+gcd(sin(x),x**2 + 1); & 1 \\
+gcd(765,68); & 17
+\end{Examples}
+
+\begin{Comments}
+The operator \name{gcd} described here provides an explicit means to find the
+gcd of two expressions. The switch \name{gcd} described below simplifies
+expressions by finding and canceling gcd's at every opportunity. When
+the switch \nameref{ezgcd} is also on, gcd's are figured using the EZ GCD
+algorithm, which is usually faster.
+%%% The \nameref{heugcd} switch is also available, providing
+%%% gcd's by the Heuristic algorithm.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{LN}
+\index{logarithm}
+\begin{Syntax}
+\name{ln}\(\meta{expression}\)
+\end{Syntax}
+\meta{expression} can be any valid scalar REDUCE expression.
+
+The \name{ln} operator returns the natural logarithm of its argument.
+However, unlike \nameref{log}, there are no algebraic rules associated
+with it; it will only evaluate when \nameref{rounded} is on, and the
+argument is a real number.
+
+\begin{Examples}
+ln(x); & LN(X) \\
+ln 4; & LN(4) \\
+ln(e); & LN(E) \\
+df(ln(x),x); & DF(LN(X),X) \\
+on rounded; \\
+ln 4; & 1.38629436112 \\
+ln e; & 1
+\end{Examples}
+
+\begin{Comments}
+Because of the restricted algebraic properties of \name{ln}, users are
+advised to use \nameref{log} whenever possible.
+\end{Comments}
+
+\end{Operator}
+
+
+\begin{Operator}{LOG}
+\index{logarithm}
+The \name{log} operator returns the natural logarithm of its argument.
+\begin{Syntax}
+\name{log}\(\meta{expression}\) or \name{log} \meta{expression}
+\end{Syntax}
+
+\meta{expression} can be any valid scalar REDUCE expression.
+
+\begin{Examples}
+log(x); & LOG(X) \\
+log 4; & LOG(4) \\
+log(e); & 1 \\
+on rounded; \\
+log 4; & 1.38629436112
+\end{Examples}
+
+\begin{Comments}
+\name{log} returns a numeric value only when \nameref{rounded} is on. In that
+case, use of a negative argument for \name{log} results in an error
+message. No error is given on a negative argument when REDUCE is not in
+that mode.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{LOGB}
+\index{logarithm}
+\begin{Syntax}
+\name{logb}\(\meta{expression}\,\meta{integer}\)
+\end{Syntax}
+\meta{expression} can be any valid scalar REDUCE expression.
+
+The \name{logb} operator returns the logarithm of its first argument using
+the second argument as base. However, unlike \nameref{log}, there are no
+algebraic rules associated with it; it will only evaluate when
+\nameref{rounded} is on, and the first argument is a real number.
+
+\begin{Examples}
+logb(x,2); & LOGB(X,2) \\
+logb(4,3); & LOGB(4,3) \\
+logb(2,2); & LOGB(2,2) \\
+df(logb(x,3),x); & DF(LOGB(X,3),X) \\
+on rounded; \\
+logb(4,3); & 1.26185950714 \\
+logb(2,2); & 1
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{MAX}
+\index{maximum}
+The operator \name{max} is an n-ary prefix operator, which returns the largest
+value in its arguments.
+\begin{Syntax}
+\name{max}\(\meta{expression}\{,\meta{expression}\}\optional\)
+
+\end{Syntax}
+
+\meta{expression} must evaluate to a number. \name{max} of an empty list
+returns 0.
+
+\begin{Examples}
+max(4,6,10,-1); & 10 \\
+<>;
+ & 46 \\
+max(-5,-10,-a); & -5
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{MIN}
+\index{minimum}
+The operator \name{min} is an n-ary prefix operator, which returns the
+smallest value in its arguments.
+\begin{Syntax}
+\name{min}\(\meta{expression}\{,\meta{expression}\}\optional\)
+\end{Syntax}
+
+\meta{expression} must evaluate to a number. \name{min} of an empty list
+returns 0.
+\begin{Examples}
+min(-3,0,17,2); & -3 \\
+<>;
+ & 16 \\
+min(5,10,a); & 5
+\end{Examples}
+\end{Operator}
+
+
+\begin{Operator}{MINUS}
+The \name{minus} operator is a unary minus, returning the negative of its
+argument. It is equivalent to the unary \name{-}.
+\begin{Syntax}
+\name{minus}\(\meta{expression}\)
+
+
+\end{Syntax}
+
+\meta{expression} may be any scalar REDUCE expression.
+
+\begin{Examples}
+minus(a); & - A \\
+minus(-1); & 1 \\
+minus((x+1)**4); & - (X^{4} + 4*X^{3} + 6*X^{2} + 4*X + 1)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{NEXTPRIME}
+\index{prime number}
+\begin{Syntax}
+\name{nextprime}\(\meta{expression}\)
+\end{Syntax}
+
+If the argument of \name{nextprime} is an integer, the least prime greater
+than that argument is returned. Otherwise, a type error results.
+
+\begin{Examples}
+nextprime 5001; & 5003 \\
+nextprime(10^30); & 1000000000000000000000000000057 \\
+nextprime a; & ***** A invalid as integer
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Switch}{NOCONVERT}
+Under normal circumstances when \name{rounded} is on, \REDUCE\ converts the
+number 1.0 to the integer 1. If this is not desired, the switch
+\name{noconvert} can be turned on.
+\begin{Examples}
+on rounded; \\
+1.0000000000001; & 1 \\
+on noconvert; \\
+1.0000000000001; & 1.0 \\
+\end{Examples}
+\end{Switch}
+
+\begin{Operator}{NORM}
+\index{complex}
+\begin{Syntax}
+\name{norm}\(\meta{expression}\)
+\end{Syntax}
+
+If \name{rounded} is on, and the argument is a real number, \meta{norm}
+returns its absolute value. If \name{complex} is also on, \meta{norm}
+returns the square root of the sum of squares of the real and imaginary
+parts of the argument. In all other cases, a result is returned in
+terms of the original operator.
+
+\begin{Examples}
+norm (-2); & NORM(-2) \\
+on rounded;\\
+ws; & 2.0 \\
+norm(3+4i); & NORM(4*I+3) \\
+on complex;\\
+ws; & 5.0\\
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{PERM}
+\index{permutation}
+\begin{Syntax}
+perm(\meta{expression1},\meta{expression2})
+\end{Syntax}
+
+If \meta{expression1} and \meta{expression2} evaluate to positive integers,
+\name{perm} returns the number of permutations possible in selecting
+\meta{expression1} objects from \meta{expression2} objects.
+In other cases, an expression in the original operator is returned.
+
+\begin{Examples}
+perm(1,1); & 1 \\
+perm(3,5); & 60 \\
+perm(-3,5); & PERM(-3,5) \\
+perm(a,b); & PERM(A,B)
+\end{Examples}
+
+\end{Operator}
+
+\begin{Operator}{PLUS}
+The \name{plus} operator is both an infix and prefix n-ary addition
+operator. It exists because of the way in which {\REDUCE} handles such
+operators internally, and is not recommended for use in algebraic mode
+programming. \nameref{plussign}, which has the identical effect, should be
+used instead.
+\begin{Syntax}
+\name{plus}\(\meta{expression},\meta{expression}\{,\meta{expression}\}
+\optional\) or \\
+ \meta{expression} \name{plus} \meta{expression} \{\name{plus} \meta{expression}\}\optional
+\end{Syntax}
+
+\meta{expression} can be any valid REDUCE expression, including matrix
+expressions of the same dimensions.
+
+\begin{Examples}
+a plus b plus c plus d; & A + B + C + D \\
+4.5 plus 10; & \rfrac{29}{2} \\\\
+plus(x**2,y**2); & X^{2} + Y^{2}
+\end{Examples}
+\end{Operator}
+
+
+\begin{Operator}{QUOTIENT}
+The \name{quotient} operator is both an infix and prefix binary operator that
+returns the quotient of its first argument divided by its second. It is
+also a unary \nameref{recip}rocal operator. It is identical to \name{/} and
+\nameref{slash}.
+\begin{Syntax}
+\name{quotient}\(\meta{expression},\meta{expression}\) or
+\meta{expression} \name{quotient} \meta{expression} or
+\name{quotient}\(\meta{expression}\) or
+\name{quotient} \meta{expression}
+\end{Syntax}
+
+\meta{expression} can be any valid REDUCE scalar expression. Matrix
+expressions can also be used if the second expression is invertible and the
+matrices are of the correct dimensions.
+\begin{Examples}
+quotient(a,x+1); & \rfrac{A}{X + 1} \\
+7 quotient 17; & \rfrac{7}{17} \\
+on rounded; \\
+4.5 quotient 2; & 2.25 \\
+quotient(x**2 + 3*x + 2,x+1); & X + 2 \\
+matrix m,inverse; \\
+m := mat((a,b),(c,d)); & \begin{multilineoutput}{6cm}
+M(1,1) := A;
+M(1,2) := B;
+M(2,1) := C
+M(2,2) := D
+\end{multilineoutput}\\
+
+inverse := quotient m; & \begin{multilineoutput}{8cm}
+INVERSE(1,1) := \rfrac{D}{A*D - B*C}
+INVERSE(1,2) := - \rfrac{B}{A*D - B*C}
+INVERSE(2,1) := - \rfrac{C}{A*D - B*C}
+INVERSE(2,2) := \rfrac{A}{A*D - B*C}
+\end{multilineoutput}
+
+\end{Examples}
+
+\begin{Comments}
+The \name{quotient} operator is left associative: \name{a quotient b quotient c}
+is equivalent to \name{(a quotient b) quotient c}.
+
+If a matrix argument to the unary \name{quotient} is not invertible, or if the
+second matrix argument to the binary quotient is not invertible, an error
+message is given.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{RAD2DEG}
+\index{degrees}\index{radians}
+\begin{Syntax}
+\name{rad2deg}\(\meta{expression}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{expression} is a real number, the
+operator \name{rad2deg} will interpret it as radians, and convert it to
+the equivalent degrees. In all other cases, an expression in terms of the
+original operator is returned.
+
+\begin{Examples}
+rad2deg 1; & RAD2DEG(1) \\
+on rounded; \\
+ws; & 57.2957795131 \\
+rad2deg a; & RAD2DEG(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{RAD2DMS}
+\index{degrees}\index{radians}
+
+\begin{Syntax}
+\name{rad2dms}\(\meta{expression}\)
+\end{Syntax}
+
+In \nameref{rounded} mode, if \meta{expression} is a real number, the
+operator \name{rad2dms} will interpret it as radians, and convert it to a
+list containing the equivalent degrees, minutes and seconds. In all other
+cases, an expression in terms of the original operator is returned.
+
+\begin{Examples}
+rad2dms 1; & RAD2DMS(1) \\
+on rounded; \\
+ws; & \{57,17,44.8062470964\} \\
+rad2dms a; & RAD2DMS(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{RECIP}
+\name{recip} is the alphabetical name for the division operator \name{/}
+or \nameref{slash} used as a unary operator. The use of \name{/} is preferred.
+
+\begin{Examples}
+recip a; & \rfrac{1}{A} \\
+recip 2; & \rfrac{1}{2}
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Operator}{REMAINDER}
+\index{polynomial}
+The \name{remainder} operator returns the remainder after its first
+argument is divided by its second argument.
+
+\begin{Syntax}
+\name{remainder}\(\meta{expression},\meta{expression}\)
+\end{Syntax}
+
+\meta{expression} can be any valid REDUCE polynomial, and is not limited
+to numeric values.
+
+\begin{Examples}
+remainder(13,6); & 1 \\
+remainder(x**2 + 3*x + 2,x+1); & 0 \\
+remainder(x**3 + 12*x + 4,x**2 + 1); & 11*X + 4 \\
+remainder(sin(2*x),x*y); & SIN(2*X)
+\end{Examples}
+
+\begin{Comments}
+In the default case, remainders are calculated over the integers. If you
+need the remainder with respect to another domain, it must be declared
+explicitly.
+
+If the first argument to \name{remainder} contains a denominator not equal to
+1, an error occurs.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{ROUND}
+\index{integer}
+
+\begin{Syntax}
+\name{round}\(\meta{expression}\)
+\end{Syntax}
+
+If its argument has a numerical value, \name{round} rounds it to the
+nearest integer. For non-numeric arguments, the value is an expression in
+the original operator.
+
+\begin{Examples}
+round 3.4; & 3 \\
+round 3.5; & 4 \\
+round a; & ROUND(A)
+\end{Examples}
+
+\end{Operator}
+
+
+\begin{Command}{SETMOD}
+\index{modular}
+The \name{setmod} command sets the modulus value for subsequent \nameref{modular}
+arithmetic.
+\begin{Syntax}
+\name{setmod} \meta{integer}
+\end{Syntax}
+
+\meta{integer} must be positive, and greater than 1. It need not be a prime
+number.
+
+\begin{Examples}
+setmod 6; & 1 \\
+on modular; \\
+16; & 4 \\
+x^2 + 5x + 7; & X^{2} + 5*X + 1 \\
+x/3; & \rfrac{X}{3} \\
+setmod 2; & 6 \\
+(x+1)^4; & X^{4} + 1 \\
+x/3; & X
+\end{Examples}
+\begin{Comments}
+\name{setmod} returns the previous modulus, or 1 if none has been set
+before. \name{setmod} only has effect when \nameref{modular} is on.
+
+Modular operations are done only on numbers such as coefficients of
+polynomials, not on the exponents. The modulus need not be prime.
+Attempts to divide by a power of the modulus produces an error message, since the
+operation is equivalent to dividing by 0. However, dividing by a factor
+of a non-prime modulus does not produce an error message.
+\end{Comments}
+\end{Command}
+
+
+\begin{Operator}{SIGN}
+
+\begin{Syntax}
+\name{sign} \meta{expression}
+\end{Syntax}
+
+\name{sign} tries to evaluate the sign of its argument. If this
+is possible \name{sign} returns one of 1, 0 or -1. Otherwise, the result
+is the original form or a simplified variant.
+
+\begin{Examples}
+ sign(-5) & -1\\
+ sign(-a^2*b) & -SIGN(B)\\
+\end{Examples}
+
+\begin{Comments}
+Even powers of formal expressions are assumed to be positive only as long
+as the switch \nameref{complex} is off.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{SQRT}
+\index{square root}
+The \name{sqrt} operator returns the square root of its argument.
+\begin{Syntax}
+\name{sqrt}\(\meta{expression}\)
+\end{Syntax}
+
+\meta{expression} can be any REDUCE scalar expression.
+
+\begin{Examples}
+sqrt(16*a^3); & 4*SQRT(A)*A \\
+sqrt(17); & SQRT(17) \\
+on rounded; \\
+sqrt(17); & 4.12310562562 \\
+off rounded; \\
+sqrt(a*b*c^5*d^3*27); &
+ 3*SQRT(D)*SQRT(C)*SQRT(B)*SQRT(A)*SQRT(3)*C^{2}*D
+\end{Examples}
+\begin{Comments}
+\name{sqrt} checks its argument for squared factors and removes them.
+% If the \name{reduced} switch is on, square roots of a product become a
+% product of square roots.
+
+Numeric values for square roots that are not exact integers are given only
+when \nameref{rounded} is on.
+
+Please note that \name{sqrt(a**2)} is given as \name{a}, which may be
+incorrect if \name{a} eventually has a negative value. If you are
+programming a calculation in which this is a concern, you can turn on the
+\nameref{precise} switch, which causes the absolute value of the square root
+to be returned.
+\end{Comments}
+\end{Operator}
+
+
+\begin{Operator}{TIMES}
+The \name{times} operator is an infix or prefix n-ary multiplication
+operator. It is identical to \name{*}.
+\begin{Syntax}
+\meta{expression} \name{times} \meta{expression} \{\name{times} \meta{expression}\}\optional
+
+ or \name{times}\(\meta{expression},\meta{expression} \{,\meta{expression}\}\optional\)
+\end{Syntax}
+
+\meta{expression} can be any valid REDUCE scalar or matrix expression.
+Matrix expressions must be of the correct dimensions. Compatible scalar
+and matrix expressions can be mixed.
+
+\begin{Examples}
+var1 times var2; & VAR1*VAR2 \\
+times(6,5); & 30 \\
+matrix aa,bb; \\
+aa := mat((1),(2),(x))\$ \\
+bb := mat((0,3,1))\$ \\
+aa times bb times 5; &
+\begin{multilineoutput}{6cm}
+[0 15 5 ]
+[ ]
+[0 30 10 ]
+[ ]
+[0 15*X 5*X]
+\end{multilineoutput}
+\end{Examples}
+\end{Operator}
+