Floating point rounding modes: we should restrict them slightly

Don nospam at nospam.com
Sun Sep 13 03:14:02 PDT 2009


Walter Bright wrote:
> Don wrote:
>> PROPOSAL:
>> Change the spec by adding the line to float.html:
>> "If the floating-point rounding mode is changed within a function, it 
>> must be restored before the function exits. If this rule is violated 
>> (for example, by the use of inline asm), the rounding mode used for 
>> subsequent calculations is undefined."
> 
> But that doesn't allow for changing the rounding mode at a global level, 
> then rerunning one's computation to determine how rounding affects their 
> final result.

It doesn't prevent that at all. You just need to change the rounding 
mode before running your computation (at the start of main(), for 
example), and then reset it after performing the computation. What it 
does do is prevent different terms within a single expression from 
interacting which other.

eg
double foo() {
   return x() + y();
}
x() and y() can use whichever rounding modes they like, and if they are 
impure, they can affect one another, but under this proposal, they 
cannot change the meaning of the addition inside foo().



More information about the Digitalmars-d mailing list