MODULE common IMPLICIT NONE REAL data END MODULE common REAL FUNCTION value (arg) USE common IMPLICIT NONE REAL arg value = (arg-data)**3 END FUNCTION value REAL FUNCTION derivative (arg) USE common IMPLICIT NONE REAL arg derivative = 3*(arg-data)**2 END FUNCTION derivative PROGRAM main USE common IMPLICIT NONE REAL location REAL, EXTERNAL :: value, derivative REAL, DIMENSION(5) :: previous INTEGER :: i READ (*,*) data location = 0.0 DO i = 1,5 previous(i) = 0.0 END DO DO location = location - value(location)/derivative(location) WRITE (*,'(F20.16,F20.16,F20.16)') location DO i = 1,5 if (location .EQ. previous(i)) GOTO 10 END DO DO i = 1,4 previous(i+1) = previous(i) END DO previous(5) = location END DO 10 CONTINUE END PROGRAM main