1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

115 lines
3.8 KiB
Plaintext

BEGIN
INTEGER I, N ;
REAL E, F, INCRE, G ;
ARRAY A, C, D, ER, EI[0:50] ;
FILE CARD(1,10), PRINTER 1 (1,15) ;
FORMAT F1(I4,(12F6.3)), F2(X51,"ROOTS OF THE POLYNOMIAL"//X46,
"REAL", X12, "IMAGINARY"/(X37, E18.11, X4, E18.11)),
F4(///X51,"ERROR OF THE POLYNOMIAL"//X46,"REAL", X12,
"IMAGINARY"/(X37, E18.11, X4, E18.11)) ;
PROCEDURE RPOLY(E, F, INCRE, G, N, A, C, D, ER, EI) ;
COMMENT PROCEDURE RPOLY FINDS THE ROOTS OF A POLYNOMIAL, THE
COEFFICIENTS OF WHICH ARE REAL NUMBERS.
CARD SEQUENCE BEGINS WITH RPLY0000
FIRST RELEASE DATE 07/01/64 ;
VALUE E, F, INCRE, G, N ;
INTEGER N ;
REAL E, F, INCRE, G ;
REAL ARRAY A, C, D, ER, EI[0] ;
BEGIN
INTEGER I, N1, RCOUNT, K, L ;
REAL H, U, V, W, R, S, PR, PS, UMIN, VMIN, T, T1, T2, T3, P,Q ;
LABEL S9, START, EXIT, ROOT ;
ARRAY B[0:N] ;
PROCEDURE ORPOL(N, A, X, Y, T, IT) ;
VALUE N, X, Y ;
INTEGER N ;
REAL X, Y, T, IT ;
REAL ARRAY A[0] ;
BEGIN
REAL P ;
INTEGER I ;
T ~ A[N] ; IT ~ 0 ;
FOR I ~ N-1 STEP -1 UNTIL 0 DO
BEGIN
P ~ T | X - IT | Y + A[I] ;
IT ~ IT | X + T | Y ;
T ~ P
END
END ;
FOR I ~ 0 STEP 1 UNTIL N DO B[I] ~ A[I] ; N1 ~ N ;
RCOUNT ~ 1 ;
START: H ~ INCRE ; U ~ E ; V ~ F ;
S9: W ~ 9.9@60 ;
R ~ U-H ;
FOR K ~ 1 STEP 1 UNTIL 3 DO
BEGIN
S ~ V-H ;
FOR L ~ 1 STEP 1 UNTIL 3 DO
BEGIN
ORPOL(N1, B, R, S, PR, PS) ;
IF (ABS(PR) + ABS(PS)) < W THEN
BEGIN
UMIN ~ R ; VMIN ~ S ; W ~ ABS(PR) + ABS(PS)
END ;
S ~ S+H
END ;
R ~ R+H
END ;
IF ABS(U-UMIN) < (1.0@-10) | ABS(U) AND
ABS(V-VMIN) < (1.0@-10) | ABS(V) THEN
BEGIN
IF SQRT(U*2 + V*2) | 1.0@-12 } H THEN GO TO ROOT ;
H ~ H/G ;
GO TO S9
END ;
U ~ UMIN ; V ~ VMIN ; GO TO S9 ;
ROOT: IF ABS(V) < H|1000 THEN V ~ 0 ;
C[RCOUNT] ~ U ; D[RCOUNT] ~ V ;
ORPOL(N, A,U, V,ER[RCOUNT],EI[RCOUNT]) ;
RCOUNT ~ RCOUNT + 1 ;
IF V ! 0 THEN
BEGIN
C[RCOUNT] ~ U ; D[RCOUNT] ~ -V ;
ORPOL(N, A,U,-V,ER[RCOUNT],EI[RCOUNT]) ;
RCOUNT ~ RCOUNT + 1
END ;
IF RCOUNT > N THEN GO TO EXIT ;
IF V = 0 THEN
BEGIN
T ~ B[N1-1] ;
B[N1-1] ~ B[N1] ;
FOR I ~ N1-2 STEP -1 UNTIL 0 DO
BEGIN
S ~ T + U | B[I+1] ;
T ~ B[I] ; B[I] ~ S
END ;
N1 ~ N1-1 ;
END
ELSE
BEGIN
P ~ -2 | U ; Q ~ U+2 + V*2 ;
T1 ~ B[N1-2] ; T2 ~ B[N1-3] ;
B[N1-2] ~ B[N1] ;
B[N1-3] ~ B[N1-1] - P | B[N1-2] ;
FOR I ~ N1-4 STEP -1 UNTIL 0 DO
BEGIN
T3 ~ B[I] ;
B[I] ~ T1 - P | B[I+1] - Q | B[I+2] ;
T1 ~ T2 ; T2 ~ T3
END ;
N1 ~ N1-2
END;
GO TO START ;
EXIT: END ;
READ(CARD,F1,N, FOR I ~0 STEP 1 UNTIL N DO A[I]) ;
WRITE(PRINTER, F1, N, FOR I ~ 0 STEP 1 UNTIL N DO A[I]) ;
E ~ F ~ 0.5 ; INCRE ~ 1 ; G ~ 5 ;
RPOLY(E, F, INCRE, G, N, A, C, D, ER, EI) ;
WRITE(PRINTER, F2, FOR I ~ 1 STEP 1 UNTIL N DO
[C[I], D[I]]) ;
WRITE(PRINTER, F4, FOR I ~ 1 STEP 1 UNTIL N DO
[ER[I], EI[I]])
END.
3 2. 0. -1. 1.