extern function arctan ( x : real ): real; const half_pi = 1.5707963267948; sixth_pi = 0.52359877559828; twelfth_pi = 0.26179938779914; sqrt3 = 1.7320508075689; var flag2,flag3,i : integer; result : real; sign : char; procedure compute; var flip,power,x2,odd1,result2 : real; i,j : integer; begin (* compute *) flip:=1.0; power:=x; x2:=sqr(power); odd1:=1.0; j:=0; i:=0; result:=0.0; repeat result2:=result; result:=result + flip * ( power/odd1 ); odd1:=odd1+2.0; flip:=-flip; power:=power * x2; j:=j+1; i:=i+1; if i > 5 then begin i:=0; if abs(result-result2) < (1e-12*result) then result2:=result; end; until result = result2; end; (* compute *) begin (* arctan *) if x = 0.0 then arctan:=0.0 else begin if x < 0.0 then begin x:=-x; sign:='-' end else sign:='+'; if x > 1.0 then begin x:=1.0/x; flag2:=1; end else flag2:=0; if x > twelfth_pi then begin x:=( sqrt3 * x - 1.0 )/( x + sqrt3 ); flag3:=1; end else flag3:=0; if (abs(x) <= 1.0e-08) then result := x else compute; if flag3 = 1 then result:=result + sixth_pi; if flag2 = 1 then result:=half_pi - result; if sign = '-' then arctan:=-result else arctan:=result; end; (* else *) end; (* arctan *).