Counter-proposal: Syntax for FP Attributes on blocks or expressions
Don
nospam at nospam.com
Fri Mar 13 09:41:12 PDT 2009
Joel C. Salomon wrote:
> Don wrote:
>> Consider this code:
>> double add(double x, double y) {
>> return x + y;
>> }
>> Is this code pure? (…)
>> Technically, it isn't. If you change the floating-point rounding mode on
>> the processor, you get a different result for exactly the same inputs.
>
> IEEE 754-2008, §4 (Attributes and Rounding), prescribes:
> An attribute is logically associated with a program block to
> modify its numerical and exception semantics. A user can specify
> a constant value for an attribute parameter.
>
> Some attributes have the effect of an implicit parameter to most
> individual operations of this standard; language standards shall
> specify
> — rounding-direction attributes (see 4.3)
> and should specify
> — alternate exception handling attributes (see 8).
>
> If D offered some way to statically set these attributes on a block to
> anything but the default, this could make the code pure. (Unless you
> explicitly set the mode to “dynamic”, as normally is the case on x86.)
But there's only 2 modes that are important in practice: 'default' and
'dynamic'. If you have dynamic, any other mode can be done trivially
with a library solution. (A compiler vendor could choose to recognize
the function call as an intrinsic, and perform optimisatio n in a few cases.
> More likely, though, you’d want to template code like this on the
> currently-selected rounding mode.
>
> So, can D become the first language to properly implement this aspect of
> 754-2008?
>
> —Joel Salomon
Unless you have a specific use-case in mind?
More information about the Digitalmars-d
mailing list