Always false float comparisons
Timon Gehr via Digitalmars-d
digitalmars-d at puremagic.com
Sat May 21 09:07:18 PDT 2016
On 20.05.2016 14:34, Johan Engelen wrote:
> On Thursday, 19 May 2016 at 18:22:48 UTC, Timon Gehr wrote:
>>
>> dmd -run kahanDemo.d
>> 1000000000000000.000000
>> 1000000100000000.000000
>> 1000000000000000.000000
>>
>> dmd -m32 -O -run kahanDemo.d
>> 1000000000000000.000000
>> 1000000000000000.000000
>> 1000000000000000.000000
>>
>> Better?
>
> Ignore if you think it's not relevant.
> I am a bit lost in this thread. I thought this was about floating point
> CTFE,
Yes, this is how it started out. :)
At some point, I made the comment that the compiler should never be
allowed to use a higher precision than the one specified, which
broadened the scope of the discussion somewhat. But the kinds of
problems caused by using higher precision than requested can be similar
for CTFE and runtime.
> but I think what you are seeing here (in the 2nd case) is the DMD
> optimizer allowing reassociation of fp expressions?
I don't believe it does (Walter knows /very/ well that a+(b+c) is not
the same as (a+b)+c), but I have not looked at the assembly output. The
result becomes wrong when 80 bit precision is used behind the scenes for
some (but not all) of the computation, so this could be the explanation.
> LDC does not allow
> that (per default) and produces the 1000000100000000.000000 result also
> with optimization on.
>
> -Johan
Thanks!
More information about the Digitalmars-d
mailing list