Always false float comparisons

Era Scarecrow via Digitalmars-d digitalmars-d at puremagic.com
Sun May 15 00:10:49 PDT 2016


On Sunday, 15 May 2016 at 06:49:19 UTC, Ola Fosheim Grøstad wrote:
> On Saturday, 14 May 2016 at 20:41:12 UTC, Era Scarecrow wrote:
>>  The real reason it's false is because you're comparing 
>> against an immutable (constant), or my results lead me to 
>> believe that; Otherwise why could cf and If work?
>
> The "immutable" is of type real... Unfortunately the "cf" is 
> also computing as real whereas "f" is implicitly converted to 
> real from float. It makes comparing floating point types for 
> equality implementation defined in D, I.e. unreliable.

  But the const and immutable still have to fit within the 
confines of the size provided, so the fact they were calculated 
as real doesn't matter when they are stored as floats. If all the 
results are inverted, I don't see how that works...

Although it does make sense that a float is being promoted up, 
and the lost precision vs the real is the problem... to which 
point it should issue a warning for different types.

Does this mean that instead for compares with a float/constant 
should be demoted down a level if it can? Although I'm sure using 
the f will force it to be correct.


But then why does f==If fail? It doesn't answer that critical 
question, since they should be identical.


More information about the Digitalmars-d mailing list