Artifact 774f5a9167dbd7baf368161fdbf8a984c753365285db2486d56b4e94243463f3:
- Executable file
r36/help/arith.tex
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 27257) [annotate] [blame] [check-ins using] [more...]
- Executable file
r37/doc/help/arith.tex
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 27257) [annotate] [blame] [check-ins using]
- Executable file
r38/doc/help/arith.tex
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 27257) [annotate] [blame] [check-ins using]
\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 \\ <<a := 23;b := 2*a;c := 4**2;max(a,b,c)>>; & 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 \\ <<a := 23;b := 2*a;c := 4**2;min(a,b,c)>>; & 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}