Always false float comparisons
Walter Bright via Digitalmars-d
digitalmars-d at puremagic.com
Tue May 17 14:07:21 PDT 2016
On 5/17/2016 11:08 AM, Timon Gehr wrote:
> Right. Hence, the 80-bit CTFE results have to be converted to the final
> precision at some point in order to commence the runtime computation. This means
> that additional rounding happens, which was not present in the original program.
> The additional total roundoff error this introduces can exceed the roundoff
> error you would have suffered by using the lower precision in the first place,
> sometimes completely defeating precision-enhancing improvements to an algorithm.
I'd like to see an example of double rounding "completely defeating" an
algorithm, and why an unusual case of producing a slightly worse answer trumps
the usual case of producing better answers.
> There are other reasons why I think that this kind of implementation-defined
> behaviour is a terribly bad idea, eg.:
>
> - it breaks common assumptions about code, especially how it behaves under
> seemingly innocuous refactorings, or with a different set of compiler flags.
As pointed out, this already happens with just about every language. It happens
with all C/C++ compilers I'm aware of. It happens as the default behavior of the
x86. And as pointed out, refactoring (x+y)+z to x+(y+z) often produces different
results, and surprises a lot of people.
> - it breaks reproducibility, which is sometimes more important that being close
> to the infinite precision result (which you cannot guarantee with any finite
> floating point type anyway).
> (E.g. in a game, it is enough if the result seems plausible, but it should be
> the same for everyone. For some scientific experiments, the ideal case is to
> have 100% reproducibility of the computation, even if it is horribly wrong, such
> that other scientists can easily uncover and diagnose the problem, for example.)
Nobody is proposing a D feature that does not produce reproducible results with
the same program on the same inputs. This complaint is a strawman, as I've
pointed out multiple times.
In fact, the results would be MORE portable than with C/C++, because the FP
behavior is completely implementation defined, and compilers take advantage of that.
More information about the Digitalmars-d
mailing list