> Date: Tue, 09 Mar 2004 14:34:45 -0800
> From: [log in to unmask]
> James Giles wrote:
>
> > [log in to unmask] wrote:
> > ...
> > > OTOH, we could extend the syntax of the kind thing-o in a literal to
> > > allow initialization expressions instead of names. One could then write
> > > something such as 0.1_real_kinds(1) to get default real and
> > > 0.1_real_kinds(2) to get double precision.
> >
> > I really dislike that one. This thread began with the observation
> > that literals with KIND specifiers are illegible and error-prone
> > and now has lead to an extension of that very feature which is less
> > legible and more error-prone. Tragic irony?
>
> The key word is ALLOW. Notice it doesn't say REQUIRE.
>
> Maybe the middle part of the discussion got lost. Follow the chain of
> logic and say where it went off the rails: If a provision is made to
> specify the kind of literal constants that aren't decorated with a kind
> specifier, how do you then get default kind? In 04-121 Dan proposed
> arrays of kind parameters in ISO_FORTRAN_ENV for logical and character
> kinds. This is trivial and clearly useful. An obvious generalization is
> to provide such arrays for all kinds. An obvious provision is that the
> (1) element in each array is the default kind. To get the default kind
> for a literal, as opposed to what-you-get-if-you-don't-say-anything, there
> are at least three solutions that start with Dan's reasonable and useful
> proposal:
>
> 1. The standard also specifies scalar named constants for the four default
> kinds (and for double precision real) in ISO_FORTRAN_ENV,
> 2. The standard allows initialization expressions for kind specifiers in
> literals (actually, <primary> would be better), or
> 3. Expect the user to invent scalar names and give them values in named-
> constant declarations.
>
> I don't like #1 because I don't like duplication. I prefer generalization.
> Between #2 and #3, I prefer #2. Consider:
>
> use ISO_FORTRAN_ENV, only: REAL_KINDS
> x = 0.1_real_kinds(1)
>
> or
>
> use ISO_FORTRAN_ENV, only: REAL_KINDS
> integer, parameter :: DRK = real_kinds(1)
> x = 0.1_drk
What's wrong with 1.0 for default real, 1.0d0 for double precision,
and 1.0q0 for extended or quad precision?
No "_dp" etc addendum required.
Then if you really want default real constants (and/or
other precision constants) to have a given user-defined
kind, give it via "_dp" etc.
> --
> Van Snyder
|