Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran Help - Do loops not calculating.

  1. Sep 11, 2012 #1
    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


    ! 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!!
  2. jcsd
  3. Sep 11, 2012 #2

    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.

    Last edited: Sep 11, 2012
  4. Sep 11, 2012 #3
    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.

  5. Sep 11, 2012 #4
    Try putting in some lines like
    print *, "a"
    print *, "b"

    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?
  6. Sep 11, 2012 #5


    User Avatar

    Staff: Mentor

    Welcome to Physics Forums, skockler8!

    I guess you didn't notice that we have a programming forum. I've moved this thread there.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook