Index
Home
About
Blog
From: robert.corbett@sun.com (Robert Corbett)
Newsgroups: comp.lang.fortran
Subject: Re: What do you prefer: real(8) or double precision and why?
Date: 24 Aug 2004 21:41:15 -0700
Message-ID: <cb977dbc.0408242041.264ea84b@posting.google.com>
bv <bvoh@Xsdynamix.com> wrote in message news:<412BC788.6C9C13F0@Xsdynamix.com>...
>
> Why not keep it simple,
>
> real*8 a
A REAL FORTRANner. You're not alone. I estimate that about 80%
of the programs I have seen from Sun's users use star typing.
Many of those programs are still essentially FORTRAN 77 programs,
but even most programs written using what is otherwise good
Fortran 90/95 style use star typing.
Star typing is not part of the official standard, but it is a
defacto standard. I know of implementations that didn't provide
star typing, but I don't know of any that are still in production.
Sincerely,
Bob Corbett
From: Richard Maine <nospam@see.signature>
Newsgroups: comp.lang.fortran
Subject: Re: What do you prefer: real(8) or double precision and why?
Date: 24 Aug 2004 11:09:03 -0700
Message-ID: <m1u0uswgqo.fsf@macfortran.local>
arimail77@yahoo.com (Arindam Chakraborty) writes:
> Right now i always use
> double precision :: a
> in my FORTRAN 90 codes.
>
> But I am not sure if this is same as
> real(8) :: a
> in FORTRAN 90.
It is compiler-dependent whether 8 is a valid kind number for
reals at all. On some compilers, a kind of 8 will mean the same
thing as your double precision. On others, it won't be a valid
kind at all and will fail compilation. On some it might mean
the same thing as single precision, or mean some other precision.
> I am planning to switch from
> double precision :: a
> to
> integer, parameter :: WP=8
> real(kind=WP) :: a
>
> I am curious to know what experienced FORTRAN 90
> programmers prefer and why?
Well, that's an improvement, but I'd go farther. The reason that
is an improvement is that, assuming you put the definition of
WP in a module (or an include file will also do), it becomes a
one-line change if you want to convert everything to some other
precision...or if you need to use a different kind number on
different machines. You might have to use a different number,
but at least it is easy to do so. With the "double precision"
spelled out, it is considerably more work to do such a change.
On some compilers, you won't want double precision, because
single precision is already 64-bits for them. Using double
precision in that case will be a 128-bit real, which will
just make everything bigger and slower. The KIND mechanism
lets you use the same syntax to select a 64-bit real, regardless
of whether that happens to be single or double.
The step that I'd go farther is to use the selected_real_kind
intrinsic instead of the hard-wited value 8. If you do something
more like
integer, parameter :: WP = selected_real_kind(12,30)
then you will get excellent portability. That will give you
a real that has at least 12 decimal digits of precision and
a range of at least 10**(-30) to 10**30. Adjust as might be
appropriate for the application. Anyway, this will generally get
you a 64-bit real. You don't have to worry about whether that
is single or double precision or about what the particular
kind number for it is; this will work with *ALL* f90 compilers
that support a real at least that big (which is all f90 compilers
that exist now or are ever likely to).
--
Richard Maine | Good judgment comes from experience;
email: my first.last at org.domain | experience comes from bad judgment.
org: nasa, domain: gov | -- Mark Twain
Index
Home
About
Blog