Program in Forth


\ Forth implementation of Newton's method for finding
\ roots, simplified.

: z1 ( i -- ) ( f: -- z1 )
      z F@ xn{ SWAP } F@ F-
;

: Newton ( i -- ) ( f: e d p -- e d p )
             \ calculate new D
             DUP z1 FROT F* FOVER F+

             \ calculate new P
             FSWAP DUP z1 F* dif{ OVER } F@ F+

             \ calculate new E
             FROT z1 FABS F* FOVER FABS F+

             \ restore stack order
             FROT FROT
;

: FNewt ( &xn &dif n -- ) ( f: z -- e d p)
        >R
        & dif{ &!
        & xn{  &!
        R>

        z F! 0.0e0  0.0e0 0.0e0
        0 DO
             I Newton
          LOOP
;

Back: 1951-1970