> Date: Mon, 2 Oct 2000 10:30:31 -0700
> From: Ian Chivers <[log in to unmask]>
> On Mon, 02 Oct 2000 19:55:34 +0010 [log in to unmask]
> wrote:
>
> > Juergen VonHagen wrote (little bits snipped for brevity)::
> >
> > >robin wrote:
> > >>
> > >> > From: Aleksandar Donev <[log in to unmask]>
> > >>
> > >> > I have a pedagological question for the Fortran teachers out there.
> >
> > Variants of this are not only useful for teachers, but also practitioners.
> >
> > >> > How does one write "best" an expression with mixed types, say:
> > >> >
> > >> > complex(kind=sp) :: x,y
> > >> > integer :: k
> > >> >
> > >> > y=(k-1)/(k+1)*x
> >
> > If k is positive, the first part (integer arithmetic) is always 0, so y is 0
> > If k is zero, y = -x
> > If k is negative (except -1), y = 2.*x
> >
> > This assumes left to right evaluation, so (k+1)/(k-1) is integer arithmetic. I
> > believe this is part of the standard, but would bow to RM's better knowledge.
> > If it is not, I have screwed up big time over many years, but my vendors seem to
> > believe what I do.
>
> i don't have a copy of the standard at hand so can't quote the exact
> wording. fortran 90 allowed expressions to be replaced with
> a mathematically equivalent one. as this expression involves
> integer arithmetic i would have thought that (k-1)/(k+1)
> has to be done first.
Doing (k-1)/(k+1) first will produce a zero result (k > 0).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|