Very strange problem with comparing floating point numbers
Ivan Agafonov
armadil at yandex.ru
Sun Sep 30 21:10:45 PDT 2012
On Sunday, 30 September 2012 at 06:20:56 UTC, jerro wrote:
>> The second one uses fstp twice, then fld twice. I don't know,
>> maybe
>> this could be a bug.
>
> You're right the lack of one fst/fld in the first case is a
> bug. x87 floating point registers are 80 bit. This:
>
> fstp dword [ebp-0CH]
>
> Converts the value in ST0 to single precision float and stores
> it to memory (and pops ST0). When it is later loaded with fld,
> it is not the same as before storing since some precision is
> lost (because the D code compares floats and not reals, this is
> the correct behavior). In the first example, this storing and
> loading only happens for the first function call. For the
> second call the value is returned in ST0 and stays in x87
> registers until it is compared with fucompp so it is not
> truncated as the result of the first function call was. That's
> why the compared values are not equal.
Can you or anyone report this bug? I don't know how to do this.
More information about the Digitalmars-d-learn
mailing list