Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: FORTRAN 77's GO TO <label> CONTINUE into Mata


From   wgould@stata.com (William Gould, StataCorp LP)
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: FORTRAN 77's GO TO <label> CONTINUE into Mata
Date   Wed, 17 Oct 2007 09:31:07 -0500

Joseph Coveney <jcoveney@bigplanet.com> asks a question about FORTRAN
and than a claim about Mata.  I'm in denial about the claim about Mata, 
as I will explain.

First, the question:

> A question about translating the following snippet of FORTRAN 77 into Mata:
>
>                 DO 120 J=1,NCV
>                 . . .
>                 IF (SM) 100,120,100
>         100     SM=SM*B
>                 . . .
>         120     CONTINUE
>
> I currently have the following (perhaps-too-literal) translation:
>
>          for (j=1; j<=ncv; j++) {
>              . . .
>              if (!sm) goto L120
>              sm = sm * b
>              . . .
>      L120: }

Joseph asks whether if the translation right.  It is.  The Fortran line

                  IF (SM) 100,120,100

says to goto 100 if SM!=0 and goto line 120 if SM==0.

Joseph then says, 

> But in an aside exploration of Mata's behavior with an analogous probe
> function, it seems that when a -goto- sends control to the continuation
> line as above, it behaves like a -break- and not a -continue-.

That's where I go into denial because I ran an experiment:


        . mata:
        --------------------------------------- mata (type end to exit) -----
        : 
        : function bill()
        > {
        >         sm = 0 
        > 
        >         for (j=1; j<=4; j++) {
        >                 printf("j = %g\n", j)
        >                 if (!sm) goto L120
        >                 printf("doit\n")
        >         L120: }
        >         "DONE"
        > }

        : 
        : bill()
        j = 1
        j = 2
        j = 3
        j = 4
          DONE
        
        : end
        ---------------------------------------------------------------------

Am I misunderstanding?  I think the experiment I did is identical to Joseph's
code, and Mata repeated the loop 4 times, amounting to a continue, just as
Joseph expected.

It is always dangerous to assert a lack of a bug in software as complicated 
as Stata and Mata, but the presence of this bug would surprise me.
We translated most of EISPACK in the mechanical way Joseph translated his 
problem -- 3,660 lines -- and in the certification scripts for Mata, we
compile that translated code and certify it.  The construct of going to 
a close brace is not uncommon in the translated code.

I wonder if the Fortran variable SM was declared to be an integer.  If so, 
there might be a formula for the calcuation of SM in the original code 
that reads 

         SM = ...

which Joseph translated as 

         sm = ...

when what is necessary is 

         sm = floor(...)

In such a case, sm might be .001 when it ought to be 0.

-- Bill
wgould@stata.com
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index