(j3.2006) (SC22WG5.5300) [ukfortran] Did we intend to prohibit this?

N.M. Maclaren nmm1
Thu Jul 3 15:43:20 EDT 2014


On Jul 3 2014, Van Snyder wrote:
>> 
>> >As far as I can tell from looking at 7.1.12, the only function from
>> >IEEE_Arithmetic that's allowed in a constant expression is
>> >IEEE_Selected_Real_Kind.
>> >
>> >Did we intend to prohibit all the others?
>> >
>> >Is there a problem with admitting the inquiry functions, and admitting
>> >the others provided their arguments are constant expressions?
>> 
>> One issue that would have to be considered is what requirements we would
>> place on compile- and run-time options to control the modes.  IEEE 754
>> remains a very assembler-level specification, does not map well even
>> to C, and its arithmetic model is seriously incompatible with Fortran's.
>> This is probably resolvable, but isn't just a matter of relaxing the
>> restrictions.  I, for one, lack the enthusiasm to tackle this.
>
>The reason this question arose was an attempt at the following:
>
>  integer, parameter :: RK = kind(1.0e0)
>  real(rk), parameter :: SNaN = merge( 
> IEEE_Value(1.0_rk,IEEE_Signaling_NaN), &
>                                     & 0.0_rk, 
> IEEE_Support_DataType(1.0_rk) )

I am not denying there are use cases, without prejudice to my views on
their numerical justifiability.

>Are there at least a few functions from IEEE_Arithmetic, and the two
>inquiry functions from IEEE_Exceptions, that we could admit into
>constant expressions?  The functions that don't depend upon modes,
>especially the inquiry functions, ought not to be troublesome.

Eh?  Several of those more-or-less test either IEEE 754 or go-faster
modes, and others are dependent on the run-time system.  The only two
that I would regard as almost always dependent solely on the actual
representation are IEEE_SUPPORT_INF and IEEE_SUPPORT_NAN.  In fact,
the IEEE_IS_... ones are more likely to be usable at compile-time,
but I wouldn't bet on them gving the same answer as at run-time.

Indeed, IEEE 754 2008 allows modes to be associated with program
blocks (see 4.1 and 8.2), and it is not uncommon to compile different
parts of a program with different options.  As I read it, Fortran
allows that, but does not have the concept of constant functions
that behave differently in different places.

You may gather that I don't like the fancier features of IEEE 754,
and think that IEEE 754 2008 is a major disimprovement over even
IEEE 754 1984.


Regards,
Nick.




More information about the J3 mailing list