Always false float comparisons

Fool via Digitalmars-d digitalmars-d at puremagic.com
Sat May 21 02:59:37 PDT 2016


On Tuesday, 17 May 2016 at 21:07:21 UTC, Walter Bright wrote:
> [...] why an unusual case of producing a slightly worse answer 
> trumps the usual case of producing better answers.

'Sometimes worse' is not 'better', but that's not the point, here.

Even if you managed to consistently produce not less accurate 
results: if the results computed at compile time differ from 
those computed at run time you cannot safely substitute run time 
calls with compile time calls without altering the result. Even 
slightest differences can lead to completely different outcomes.

For example, if we are interested in the number of real roots of 
a quadratic polynomial we compute its discriminant D. There are 
no solutions if D is negative, there is one solution if D is zero 
and there are two solutions if D is positive. In a floating point 
environment the crucial test is often implemented with a certain 
tolerance and good implementations compute the discriminant with 
increased precision. In any case, the critical point is that we 
have to make a decision based on a single computed value. A 
difference of one unit in the last place can change the result.

Note that this in not about correctness of the result but about 
reproducibility and substitutability across run time and compile 
time boundaries.

Please make a decision, document it, and move on.

Fool


More information about the Digitalmars-d mailing list