home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / libs / matlab.lzh / MATLAB / MATLAB.LZH / Source / MatLab / RAT.FOR < prev    next >
Encoding:
Text File  |  1991-04-13  |  1004 b   |  47 lines

  1.       SUBROUTINE RAT (X, LEN, MAXD, A, B, D)
  2.       IMPLICIT NONE
  3. C
  4. C A/B = CONTINUED FRACTION APPROXIMATION TO X
  5. C        USING  LEN  TERMS EACH LESS THAN MAXD
  6. C
  7.       INTEGER LEN, MAXD
  8.       DOUBLE PRECISION X, A, B, D(LEN)
  9. C
  10.       INCLUDE MATLAB$KOM:IOP.KOM
  11. C
  12.       INTEGER I, IB, K
  13.       DOUBLE PRECISION S, T, Z
  14. C
  15.       DOUBLE PRECISION ROUND, DFLOAT
  16. C
  17. C
  18.       Z = X
  19.       DO 10 I = 1, LEN
  20.         K = I
  21.         D(K) = ROUND (Z)
  22.         Z = Z-D(K)
  23.         IF (DABS (Z)*DFLOAT (MAXD).LE.1.0D0) GO TO 20
  24.         Z = 1.0D0/Z
  25. 10    CONTINUE
  26. 20    CONTINUE
  27.       T = D(K)
  28.       S = 1.0D0
  29.       IF (K.LT.2) GO TO 40
  30.       DO 30 IB = 2, K
  31.         I = K+1-IB
  32.         Z = T
  33.         T = D(I)*T+S
  34.         S = Z
  35. 30    CONTINUE
  36. 40    CONTINUE
  37.       IF (S.LT.0.0D0) T = -T
  38.       IF (S.LT.0.0D0) S = -S
  39.       IF (DDT.EQ.27) WRITE (WTE, 50) X, T, S, (D(I), I = 1, K)
  40. 50    FORMAT (/, 1X, 1PD23.15, 0PF8.0, ' /', F8.0, 4X, 6F5.0, /,
  41.      .           (1X, 45X, 6F5.0))
  42.       A = T
  43.       B = S
  44. C
  45.       RETURN
  46.       END
  47.