home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / kmpl9803.zip / 0_arctan.cmd next >
OS/2 REXX Batch file  |  1998-02-08  |  1KB  |  54 lines

  1. /* REXX-Programm 0_arctan.cmd */
  2. /* Pi24=π/2                 */
  3.  
  4.    arg xxx,ND
  5.    Numeric Digits ND+30
  6.    vz=sign(xxx)
  7.    xx=abs(xxx)
  8.    
  9.    pi24=1.570796326794896619231321691639751442098584699687552910487472296154
  10.               
  11.    if xx = +1 then do; y=pi24/2; Signal W; end
  12.    if 0    <= xx & xx <  0.56 then Signal A
  13.    if 0.56 <= xx & xx <  2    then
  14.    do
  15.      x=(xx-1)/(xx+1)
  16.      Signal B
  17.    end
  18.    if xx >= 2 then Signal C
  19.  
  20. A: /* Arctan für 0 <= xx < 0.4142 */
  21.    y=TanArc(xx,ND)
  22.    Signal W
  23.  
  24. B: /* Arctan für 0.4142 <= x < 2.414 */
  25.    y=Pi24/2+TanArc(x,ND)
  26.    Signal W
  27.  
  28. C: /* Arctan für x > 2.414 */
  29.    t=xx**2; v=1; m=2; g=1
  30.    do forever
  31.      g=-g*(m-1)/(t*(m+1))
  32.      v=v+g
  33.      if abs(g/v) < 10**(-ND-20) then leave
  34.      m=m+2
  35.    end
  36.    y=1*pi24-v/xx
  37.  
  38. W: Numeric Digits ND+5
  39.    Return(Format(vz*y))
  40.  
  41. EXIT
  42.  
  43. TanArc:
  44.    Procedure
  45.    arg x,ND+30
  46.    t=x**2; g=1; u=1; v=1; m=2
  47.    do forever
  48.      g=-t*g*(m-1)/(m+1)
  49.      v=v+g
  50.      if abs(g/v) < 10**(-ND-20 ) then leave
  51.      m=m+2
  52.    end
  53.    return(x*v)
  54.