# Fortran Help - Do loops not calculating.

• Fortran
skockler8
Hello all,

I am working on a Fortran90 code that will give me an approximation of a few mathematical constants. My code will compile and run, however, my outputs are given as 0.000000 for all constants that I am calculating in the loops. Any help would be greatly appreciated. My code is as follows:

PROGRAM HomeWorkOne_ProbOne

IMPLICIT NONE

! Computes an estimation of the exponential function, pi, and the Euler Constant

REAL :: e, EC, pi, n_factorial, x_factorial, gamma
INTEGER :: i, n, x

x = n + 3.0/2.0

n_factorial = 1.0

DO WHILE (n < 10)
DO i = 1, n
n_factorial = n_factorial * i
END DO
e = 1/n_factorial
END DO

DO WHILE (n < 10)
EC = (1.0/n) - (LOG(REAL(n)+1.0)-LOG(REAL(n)))
END DO

DO WHILE (x < 10)
DO i = 1, x
x_factorial = x * i
gamma = (2.0 * x_factorial)/(2.0 * n + 3.0)
END DO
DO i = 1, n
n_factorial = n_factorial * i
END DO
pi = (n_factorial)/((2**(n-(1.0/4.0)*Cos(3.14*(2.0*n+1.0))))+(3.0/4.0)*(3.14**((1.0/4.0)*Cos(3.14*(2*n+1))-(1.0/4.0)))*gamma)
END DO

PRINT *, "Approximate values of:"
PRINT *, "e =", e
PRINT *, "gamma =", EC
PRINT *, "Pi =", pi
PRINT *, "Actual values of :"
PRINT *, "e =", 2.71828182
PRINT *, "gamma =", 0.57721566
PRINT *, "Pi =", 3.14159265

END PROGRAM HomeWorkOne_ProbOne

Thanks for any help!!

## Answers and Replies

tomyuey938
Hello.

You need to define "n" before "DO WHILE (n < 10)".
Also, n is not incremented in that loop.

Be careful not to mix integers and reals. For example, "n_factorial * i" is a real times an integer. "real(i)" will be better. The same for 1/n_factorial (try "1./n_factorial")

Finally, check the value of n_factorial. If it's really large, then e will be really small and you might have to use DOUBLE instead of REAL.

Hope this helps.

Tom

Last edited:
skockler8
I have done all that, it has helped greatly. Now, the program compiles completely, however, when I run it, it takes a long time and I don't receive any outputs.

Thanks

tomyuey938
Great.
Try putting in some lines like
print *, "a"
print *, "b"
etc

after each part of the code to see where it's getting stuck. Then when you know which loop is causing the problem, print out important numbers like
print *, "n= ", n
inside the loop. This should allow you to determine where it's getting stuck. Perhaps you're not incrementing one of your variables?

Mentor
Welcome to Physics Forums, skockler8!

I guess you didn't notice that we have a programming forum. I've moved this thread there.