https://issues.dlang.org/show_bug.cgi?id=14958
--- Comment #5 from yebblies <[email protected]> --- (In reply to Steven Schveighoffer from comment #4) > (In reply to yebblies from comment #3) > > This is working to spec. Please re-open as an enhancement request if you > > feel it's necessary. > > I think the expectation is violated when there is a measurable difference > between treating a value as a real and treating it as a double, and the > compiler is doing things under the hood that cannot be detected that force > the calculation to be done with reals. For instance: > As I said, if you want to use FPU hardware then the exact results will depend on exact instruction selection, which depends on inlining and register allocation. Rounding at every step is not possible in a performant way. So since we can't guarantee that two identical expressions get evaluated the same way at runtime, it doesn't make any sense to guarantee a maximum precision at compile time. eg double x = someDouble * someOtherDouble; double y = x + something; // this becomes y = mad(someDouble, someOtherDouble, something) // some code that results in registers being spilled to stack double z = x + something; // this doesn't get turned into mul+add, because the compiler decides it's better to just load x and add Now y and z may have different values thanks to increased internal precision of multiply and add. --
