[Patch, Fortran] Use -huge()-1 as most negative integer for maxval/maxloc (PR30512)
Brooks Moses
brooks.moses@codesourcery.com
Thu Feb 1 10:20:00 GMT 2007
Tobias Burnus wrote:
> As FX pointed out: "If I understand the standard correctly, -huge()-1,
> although being representible by the hardware you have, is not "within
> the representation" of this integer kind, because the range of the
> representation of an integer kind is supposed to be symmetric."
I'm going to disagree with that. The Fortran standard is generally
quite clear when it's referring to the "model representation", as (for
example) in the definition of HUGE(X): "Returns the largest number of
the model representing numbers of the same type and kind parameter as
the argument".
In the definition of MAXVAL(), it is quite clear that it is _not_
referring to the model representation: "The negative number of the
largest magnitude supported by the processor" is what is returned for a
zero-sized array. This is clearly not referring to the model
representation.
It is only the _model_ representation that is constrained to be
symmetric. The actual processor representation is not constrained in
that fashion, and the standard makes a quite clear point about not
requiring the processor representation to exactly replicate the model.
Thus, for the purposes of MAXVAL and the like, FX's point is not relevant.
(Actually, IMO it's never relevant -- for cases where the integer model
representation matters, negative numbers never actually show up as
values that an intrinsic is required to return. Thus, I do think a
reasonable case can be made that unsigned integer kinds are compatible
with the Fortran standard, though I know this is an unconventional
position.... SELECTED_INT_KIND can never return them, of course, but
that doesn't mean they can't exist.)
- Brooks
More information about the Fortran
mailing list