REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ...
% Test of Complex Number mode in REDUCE.
on complex;
(31+i)/74;
31 + i
--------
74
ws/(b+1);
31 + i
------------
74*(b + 1)
% this now comes out right!
w:=(x+3*i)**2;
2
w := x + 6*i*x - 9
on gcd;
(x**3-7*x**2+x-7)/(x**2+(3+i)*x+3*i);
2
x - (7 + i)*x + 7*i
----------------------
x + 3
off gcd;
sqrt(x**4+14*i*x**3-51*x**2-14*i*x+1);
2
abs(x + 7*i*x - 1)
% All rounded tests are done twice: first, they are done at the default
% precision, in which all rounded operations use standard floating point
% logic. Then precision is increased, causing all rounded operations to
% use extended precision bigfloat arithmetic. This is necessary to
% exercise and test the bigfloat-based arithmetic functions.
prec0 := precision 0;
prec0 := 12
% to determine the nominal default precision.
% Tests using default precision:
on rounded;
*** Domain mode complex changed to complex-rounded
(3.25 + 8.5i) + (6.75 - 8.5i);
10.0
(3.25 + 8.5i) - (6.0 - 9.5i);
- 2.75 + 18.0*i
(1.0 + 10.0*i)*(-6.5 + 2.5*i);
- 31.5 - 62.5*i
(1.2 - 3.4*i)*(-5.6 + 7.8*i);
19.8 + 28.4*i
(19.8 + 28.4*i)/(-5.6 + 7.8*i);
1.2 - 3.4*i
e;
2.71828182846
pi;
3.14159265359
17*i**2;
-17
(-7.0 + 24.0*i)**(1/2);
3.0 + 4.0*i
sqrt(-7.0 + 24.0*i);
3.0 + 4.0*i
sqrt(-10.12 - 8.16*i);
1.2 - 3.4*i
sin(0.0 + 0.0*i);
0
sin(1.0 + 0.0*i);
0.841470984808
sin(1.0 + 1.0*i);
1.29845758142 + 0.634963914785*i
cos(0.0 + 0.0*i);
1
cos(1.0 - 0.0*i);
0.540302305868
cos(1.0 + 1.0*i);
0.833730025131 - 0.988897705763*i
tan(0.0 + 0.0*i);
0
tan(1.0 + 0.0*i);
1.55740772465
tan(1.0 + 1.0*i);
0.27175258532 + 1.08392332734*i
asin(1.0 + 1.0*i);
0.666239432493 + 1.06127506191*i
acos(1.0 + 1.0*i);
0.904556894302 - 1.06127506191*i
atan(1.0 + 1.0*i);
1.0172219679 + 0.402359478109*i
log(1.0 + 1.0*i);
0.34657359028 + 0.785398163397*i
asin 2;
1.57079632679 - 1.31695789692*i
sin ws;
2.0 - 1.25983163303e-15*i
acos 2;
1.31695789692*i
cos ws;
2.0
atan(1+i);
1.0172219679 + 0.402359478109*i
tan ws;
1 + i
log(2+i);
0.804718956217 + 0.463647609001*i
exp ws;
2.0 + i
e**(i*pi);
- 1 + 1.22460635382e-16*i
e**i;
0.540302305868 + 0.841470984808*i
z := sqrt i;
z := 0.707106781187 + 0.707106781187*i
z**2;
i
off rounded;
*** Domain mode complex-rounded changed to complex
%-----------------end of normal floating point tests--------------------
precision(prec0+6);
12
% arbitrary precision increase -> bigfloat functions
%----------------------start of bigfloat tests--------------------------
on rounded;
*** Domain mode complex changed to complex-rounded
(3.25 + 8.5i) + (6.75 - 8.5i);
10.0
(3.25 + 8.5i) - (6.0 - 9.5i);
- 2.75 + 18.0*i
(1.0 + 10.0*i)*(-6.5 + 2.5*i);
- 31.5 - 62.5*i
(1.2 - 3.4*i)*(-5.6 + 7.8*i);
19.8 + 28.4*i
(19.8 + 28.4*i)/(-5.6 + 7.8*i);
1.2 - 3.4*i
e;
2.71828182845904524
pi;
3.14159265358979324
17*i**2;
-17
(-7.0 + 24.0*i)**(1/2);
3.0 + 4.0*i
sqrt(-7.0 + 24.0*i);
3.0 + 4.0*i
sqrt(-10.12 - 8.16*i);
1.2 - 3.4*i
sin(0.0 + 0.0*i);
0
sin(1.0 + 0.0*i);
0.841470984807896507
sin(1.0 + 1.0*i);
1.29845758141597729 + 0.634963914784736108*i
cos(0.0 + 0.0*i);
1
cos(1.0 - 0.0*i);
0.540302305868139717
cos(1.0 + 1.0*i);
0.833730025131149049 - 0.988897705762865096*i
tan(0.0 + 0.0*i);
0
tan(1.0 + 0.0*i);
1.55740772465490223
tan(1.0 + 1.0*i);
0.271752585319511717 + 1.08392332733869454*i
asin(1.0 + 1.0*i);
0.666239432492515255 + 1.06127506190503565*i
acos(1.0 + 1.0*i);
0.904556894302381364 - 1.06127506190503565*i
atan(1.0 + 1.0*i);
1.01722196789785137 + 0.402359478108525094*i
log(1.0 + 1.0*i);
0.346573590279972655 + 0.78539816339744831*i
asin 2;
1.57079632679489662 - 1.31695789692481671*i
sin ws;
2.0
acos 2;
1.31695789692481671*i
cos ws;
2.0
atan(1+i);
1.01722196789785137 + 0.402359478108525094*i
tan ws;
1 + i
log(2+i);
0.804718956217050187 + 0.463647609000806116*i
exp ws;
2.0 + i
e**(i*pi);
- 1
e**i;
0.540302305868139717 + 0.841470984807896507*i
z := sqrt i;
z := 0.707106781186547524 + 0.707106781186547524*i
z**2;
i
off rounded;
*** Domain mode complex-rounded changed to complex
% ---------------------------------------------------------------------
% The following examples are independent of precision.
precision prec0;
18
% restores default precision.
% on rationalize; % no longer needed, since it doesn't affect complex.
s:= 1.1+2.3i;
11 + 23*i
s := -----------
10
s/4;
11 + 23*i
-----------
40
% this would have had a common factor of 4.
x:= a+1.1+2.3i;
10*a + 11 + 23*i
x := ------------------
10
y:= b+1.2+1.3i;
10*b + 12 + 13*i
y := ------------------
10
z:= x/y;
100*a*b + (120 - 130*i)*a + (110 + 230*i)*b + 431 + 133*i
z := -----------------------------------------------------------
2
100*b + 240*b + 313
z/4;
100*a*b + (120 - 130*i)*a + (110 + 230*i)*b + 431 + 133*i
-----------------------------------------------------------
2
4*(100*b + 240*b + 313)
% this would have had a common polynomial factor b^2 + ...
z*7/4;
7*(100*a*b + (120 - 130*i)*a + (110 + 230*i)*b + 431 + 133*i)
---------------------------------------------------------------
2
4*(100*b + 240*b + 313)
s/(c^2+c+1);
11 + 23*i
-----------------
2
10*(c + c + 1)
% this would have had a common factor of c^2+c+1
clear x;
zz:= x^2+(1.1+2.3i)*x+1.2+1.3i;
2
10*x + (11 + 23*i)*x + 12 + 13*i
zz := -----------------------------------
10
ss:=1.23456789x^2+1.3579i*x+5.6789;
2
123456789*x + 135790000*i*x + 567890000
ss := ------------------------------------------
100000000
% off rationalize; % not needed now.
z:= x+1.1+2.3i;
10*x + 11 + 23*i
z := ------------------
10
on rationalize;
z;
10*x + 11 + 23*i
------------------
10
% same as previous answer.
off rationalize;
1.23456789x^2+2.3456i*x+7.89;
2
123456789*x + 234560000*i*x + 789000000
------------------------------------------
100000000
on factor;
x**2+1;
(x + i)*(x - i)
x**4-1;
(x + i)*(x - i)*(x + 1)*(x - 1)
x**4+(i+2)*x**3+(2*i+5)*x**2+(2*i+6)*x+6;
2
(x + i*x + 3)*(x + 1 + i)*(x + 1 - i)
(2*i+3)*x**4+(3*i-2)*x**3-2*(i+1)*x**2+i*x-1;
2 2
i*((2 - 3*i)*x - i)*(x + i*x - 1)
% Multivariate examples:
x**2+y**2;
(10*b + 10*i*x + 12 + 13*i)*(10*b - 10*i*x + 12 + 13*i)
---------------------------------------------------------
100
off factor;
factorize(x**2+1);
{x - i,x + i}
end;
(TIME: complex 810 850)