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?

Reply via email to