1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran variable value changing randomly

  1. Sep 22, 2016 #1

    cpburris

    User Avatar
    Gold Member

    This isn't really a question for which the template is useful..
    Can anyone explain to me why the value of the variable 'seed' in location 1 is different from the value in location 2? The only thing happening in between is the defining of the varaible v(1) using the real function. I don't see where in that 'seed' is given a new value. I've tried google searching 'Fortran seed' and such and can't find any answer.


    Code (Text):

          JRDM = 83721563
          call baysprep(JRDM)
    ! -----------------------------------------
          subroutine baysprep(first)
              integer first,seed
              common /tobays/ v(53),oldbays,seed
              save /tobays/
              seed = abs(first)
           if (seed.gt.2147483647) seed = 24287
     
           do i = 1,53
    !Location 1
            print*,'seed into do loop iteration=',seed
            v(1) = congmult(seed)
    !Location 2
            print*,'seed coming out of do loop iteration=',seed
          end do
    !
     real function congmult(ix)
    !
           integer a,p,ix,b15,b16,xhi,xalo,leftlo,fhi,k
           data a,b15,b16,p/16807,32768,65536,2147483647/
          ! assigns variables these values
           xhi = ix / b16
           xalo = a*(ix - xhi*b16)
           leftlo = xalo / b16
           fhi = xhi*a + leftlo
           k = fhi / b15
           ix = (((xalo-leftlo*b16) - p) + (fhi-k*b15)*b16) + k
           if (ix.lt.0) ix = ix + p
           congmult = real(ix)/2.147483647e+09
           end
     
    Last edited by a moderator: Sep 22, 2016
  2. jcsd
  3. Sep 22, 2016 #2

    gneill

    User Avatar

    Staff: Mentor

    Hi cpburris. Please use the template for posts to the homework forums regardless of whether you believe it is "suitable" or not. It's just one of those rules we're picky about :smile:

    Check to see if your function parameters are call-by-reference or call-by-value. I see that seed is passed to function congmult which takes takes parameter ix and modifies it, so try printing out its value from inside that function just before it returns. See if the value shown matches that of 'seed coming out of do loop iteration'.
     
  4. Sep 22, 2016 #3

    cpburris

    User Avatar
    Gold Member

    Ah, yes you were correct. The modification of the value by the function was being passed back. Thank you very much.
     
  5. Sep 22, 2016 #4

    gneill

    User Avatar

    Staff: Mentor

    You'e welcome. Glad I could help.
     
  6. Sep 22, 2016 #5

    DrClaude

    User Avatar

    Staff: Mentor

    The latter doesn't exist in Fortran. All variables are passed by reference.

    @cpburris: Note that this is how this RNG keeps track of where it is in the sequence. You give it an initial seed, but then it modifies it every time a new random number is generated. It is important not to change the value of seed between calls to congmult.
     
  7. Sep 22, 2016 #6

    gneill

    User Avatar

    Staff: Mentor

    It's something that programmers need to be aware of for whatever language they are using. Discovering the hard way is one path to enlightenment :smile:
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Fortran variable value changing randomly
Loading...