REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ...
comment
This is a demonstration of the working of elementary functions available
in the Reduce system. It is not intended as an accuracy test. Other
functions become available if certain library packages are loaded.
-------
Integer functions that work in all domain modes, independent of switch
NUMVAL, so long as their arguments evaluate to real numbers.
Functions of one argument:
FIX, SGN, ROUND, CEILING, FLOOR
(The following functions are available only in symbolic mode, so they
are not tested here: ISQRT, ICBRT, ILOG2, IROOTN);
fix a;
fix(a)
% will be evaluated only if a evaluates to a real number.
a := 27/4;
27
a := ----
4
fix a;
6
fix 12.345;
12
sign (-15/2);
-1
round 12.5;
13
ceiling 12.5;
13
floor 12.5;
12
% isqrt 12.5;
% icbrt 12.5;
% ilog2 130.7;
% irootn(72,4);
% irootn(72,3/2); % this will not evaluate.
comment Functions which require arguments which evaluate to integers:
Function of one argument: FACTORIAL
Fumction of two arguments: PERM, CHOOSE;
$
factorial 10;
3628800
perm(5,10);
30240
% permutations of 5 out of 10.
choose(5,10);
252
% choose 5 out of 10;
comment
These functions are evaluated in dmodes ROUNDED and COMPLEX-ROUNDED
(ON ROUNDED,COMPLEX) so long as their arguments and values evaluate
to real numbers and NUMVAL (normally ON) is ON.
Variable treated as function of no arguments: E, PI.
Functions of one argument:
EXP, LOG, LN, LOG10, NORM, ARG, SQRT,
RAD2DEG, RAD2DMS, DEG2RAD, DEG2DMS, DMS2DEG, DMS2RAD,
SIN, ASIN, COS, ACOS, TAN, ATAN, COT, ACOT, SEC, ASEC, CSC, ACSC,
SINH, ASINH, COSH, ACOSH, TANH, ATANH, COTH, ACOTH, SECH, ASECH,
CSCH, ACSCH.
Functions of two arguments:
EXPT, LOGB, HYPOT, ATAN2.
Function evaluation is carried out to the precision specified in the
latest PRECISION statement.
(The following functions are available only in symbolic mode, so they
are not tested here:
SIND, ASIND, COSD, ACOSD, TAND, ATAND, COTD, ACOTD, SECD, ASECD,
CSCD, ACSCD, ATAN2D, CBRT);
on rounded;
precision 6;
12
a := exp 3;
a := 20.0855
log a;
3.0
ln a;
3.0
log10 1000;
3.0
norm (-12.345);
12.345
% for real x, this is equivalent to ABS x.
arg (-12.345);
3.14159
% for real x, this -> if x<0 then pi else 0.0.
sqrt 3;
1.73205
ws**2;
3.0
deg2rad 30;
0.523599
rad2deg ws;
30.0
a := deg2dms 12.345;
a := {12,20,42.0}
% a will be a list.
dms2deg ws;
12.345
dms2rad a;
0.215461
rad2deg ws;
12.345
asin 0.5;
0.523599
sin ws;
0.5
acos 0.5;
1.0472
cos ws;
0.5
atan 0.5;
0.463648
tan ws;
0.5
acot 0.5;
1.10715
cot ws;
0.5
asec 3;
1.23096
sec ws;
3.0
acsc 3;
0.339837
csc ws;
3.0
asinh 0.5;
0.481212
sinh ws;
0.5
acosh 2;
1.31696
cosh ws;
2.0
atanh 0.5;
0.549306
tanh ws;
0.5
acoth 2;
0.549306
coth ws;
2.0
sech 1;
0.648054
asech ws;
1
csch 1;
0.850918
acsch ws;
1
expt(2,1.234);
2.35218
logb(ws,2);
1.234
hypot(3,4);
5.0
a := -3*pi/4;
a := - 2.35619
% any -pi<a<=pi should work.
atan2(sin a,cos a);
- 2.35619
ws - a;
0
% should be 0.
precision 20;
6
% functions will be computed to 20 places.
sin 1.5;
0.99749498660405443094
asin ws;
1.5
precision 50;
20
% fuctions computed to 50 places.
sin 1.5;
0.99749498660405443094172337114148732270665142592212
asin ws;
1.5
precision 6;
50
comment If argument or value are complex, functions are not computed
when dmode is ROUNDED;
$
sin(1+i);
sin(i + 1)
% complex argument.
asin 2;
asin(2)
% value would be complex.
on complex;
*** Domain mode rounded changed to complex-rounded
%now complex arguments and complex results will be handled.
comment Complex functions of one argument:
EXP, LOG, NORM, ARG, SQRT,
SIN, ASIN, COS, ACOS, TAN, ATAN, COT, ACOT, SEC, ASEC, CSC, ACSC,
SINH, ASINH, COSH. ACOSH, TANH, ATANH, COTH, ACOTH, SECH, ASECH,
CSCH, ACSCH.
(The following functions are available only in symbolic mode, so they
are not tested here:
SIND, ASIND, COSD, ACOSD, TAND, ATAND, COTD, ACOTD, SECD, ASECD,
CSCD, ACSCD.)
Complex function of two variables: EXPT, LOGB, ATAN2;
e**(pi*i);
- 1 + 1.22461e-16*i
% should be -1 (except for computational error.)
log(1+i);
0.346574 + 0.785398*i
exp ws;
1 + i
norm(5*exp(2i));
5.0
arg(5*exp(2i));
2.0
sqrt(1+i);
1.09868 + 0.45509*i
ws**2;
1 + i
asin 2;
1.5708 - 1.31696*i
sin ws;
2.0 - 1.25983e-15*i
acos 2;
1.31696*i
cos ws;
2.0
atan(1+i);
1.01722 + 0.402359*i
tan ws;
1 + i
acot(1+i);
0.553574 - 0.402359*i
cot ws;
1 + i
asec 0.1;
2.99322*i
sec ws;
0.1
acsc 0.1;
1.5708 - 2.99322*i
csc ws;
0.1 + 7.23718e-17*i
sinh(1+i);
0.634964 + 1.29846*i
asinh ws;
1 + i
cosh(1+i);
0.83373 + 0.988898*i
acosh ws;
1 + i
atanh 2;
0.549306 + 1.5708*i
tanh ws;
2.0 + 1.83691e-16*i
acoth 0.3;
0.30952 + 1.5708*i
coth ws;
0.3 - 5.57196e-17*i
asech(1-i);
0.530638 + 1.11852*i
sech ws;
1 - i
acsch(1-i);
0.530638 + 0.452278*i
csch ws;
1 - i
expt(1+i,1-i);
2.80788 + 1.31787*i
logb(ws,1+i);
1 - i
a := 1+i;
a := 1 + i
% any a such that - pi < repart a <= pi should work.
atan2(sin a,cos a);
1 + i
ws - a;
0
% should be 0;
end;
(TIME: elem 300 300)