Always false float comparisons

Ola Fosheim Grøstad via Digitalmars-d digitalmars-d at puremagic.com
Sun May 15 23:00:59 PDT 2016


On Sunday, 15 May 2016 at 22:49:27 UTC, Walter Bright wrote:
> On 5/15/2016 2:06 PM, Ola Fosheim Grøstad wrote:
>> The net result is that adding const/immutable to a type can 
>> change the semantics
>> of the program entirely at the whim of the compiler 
>> implementor.
>
> C++ Standard allows the same increased precision, at the whim 
> of the compiler implementor, as quoted to you earlier.
>
> What your particular C++ compiler does is not relevant, as its 
> behavior is not required by the Standard.

This is a crazy attitude to take. C++ provides means to detect 
that IEEE floats are being used in the standard library. C/C++ 
supports non-standard floating point because some platforms only 
provide non-standard floating point. They don't do it because it 
is _desirable_ in general.

You might as well say that you are not required to drive on the 
right side on the road, because you occasionally have to drive on 
the left. So therefore it is ok to always drive on left.

> My proposal removes the "whim" by requiring 128 bit precision 
> for CTFE.

No, D's take on floating point is FUBAR.

const float value = 1.30;
float  copy = value;
assert(value*0.5 ==  copy*0.5); // FAILS! => shutdown








More information about the Digitalmars-d mailing list