1 DIM B(22),E(22),W(22),C(22)
5 E0=1E-12: E1=1E-4: E4=1E-20: K1=100: S5=0 
10 PRINT "DEGREE OF POLYNOMIAL?":INPUT N
15 PRINT "ENTER COEFF.: A0,A1,...,AN 1/LINE"  
20 FOR I=1 TO N+1:INPUT B(N-I+2)
25 NEXT I:IF ABS(B(1))>=E0 THEN 35
30 PRINT "A(N) ZERO OR NEARLY ZERO. CALCULATIONS END.":GOTO 999  
35 PRINT :PRINT "ROOTS:":IF N<=2 THEN 350 
40 B(N+2)=0: N1=2*INT((N+1)/2)  
45 FOR M1=1 TO N1/2: P,Q=1  
50 FOR K=1 TO K1:FOR L=1 TO K1 
55 FOR I=1 TO N1+1: C(I)=B(I):NEXT I 
60 FOR J=N1-2 TO N1-4 STEP -2:FOR I=1 TO J+1
65 C(I+1)=C(I+1)-P*C(I): C(I+2)=C(I+2)-Q*C(I)
70 NEXT I:NEXT J 
75 R0=C(N1+1): R1=C(N1)
80 S0=C(N1-1): S1=C(N1-2)
85 V0=-Q*S1: V1=S0-S1*P 
90 D0=V1*S0-V0*S1:IF ABS(D0)>=E4 THEN 110 
95 P=P+5: Q=Q+5
100 NEXT L  
110 D1=S0*R1-S1*R0: D2=R0*V1-V0*R1 
120 P1=D1/D0: Q1=D2/D0: P=P+P1: Q=Q+Q1 
130 IF ABS(R0)>=E1 THEN 150:IF ABS(R1)>=E1 THEN 150  
140 E(M1)=1:GOTO 210
150 IF ABS(P1)>=E1 THEN 170:IF ABS(Q1)>=E1 THEN 170  
160 E(M1)=2:GOTO 210
170 IF P=0 THEN 180:IF ABS(P1/P)>=E1 THEN 200 
180 IF Q=0 THEN 200:IF ABS(Q1/Q)>=E1 THEN 200 
190 E(M1)=3:GOTO 210
200 NEXT K: E(M1)=4 
210 S=-P/2: T=S*S-Q
220 IF T<0 THEN 240: T=SQR(T): W(M1)=1  
230 PRINT :PRINT S+T:PRINT S-T:GOTO 260 
240 W(M1)=-1: T=SQR(-T) 
250 PRINT :PRINT S;"+I*";T:PRINT S;"-I*";T 
260 IF E(M1)=4 THEN 999 
270 FOR J=1 TO N1-1 
280 B(J+1)=B(J+1)-P*B(J): B(J+2)=B(J+2)-Q*B(J) 
290 NEXT J  
300 N1=N1-2:IF N1>1 THEN 310:GOTO 999 
310 IF N1>=3 THEN 340
320 M1=M1+1: E(M1)=1 
330 P=B(2)/B(1): Q=B(3)/B(1):GOTO 210 
340 NEXT M1 
350 IF N=2 THEN 370
360 PRINT -B(2)/B(1):GOTO 999  
370 B(3)=B(2)*B(2)-4*B(1)*B(3)  
380 S=-B(2)/2/B(1): T=SQR(ABS(B(3)))/2/B(1)
390 M1,E(4)=4:IF SGN(B(3))<0 THEN 250:GOTO 230 
999 END 

