[Issue 20451] comparing identical floating points does not work on Win32 and FreeBSD32.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Dec 15 20:13:54 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=20451
--- Comment #3 from berni44 <bugzilla at d-ecke.de> ---
(In reply to jacob from comment #1)
> Comparing floating point numbers with "==" is in itself an error.
I know. But the "==" was there first. I tried to fix the issue and when I found
out, that the results where indeed the correct results and the (original)
problem was because double was compared with real and real produces just better
results, I added the cast. This worked for most machines...
> You shouldn't be comparing approximation of numbers to see if they are exactly
> the same.
I agree, but it's not an approximation in this case. (Although I meanwhile
solved the original stuff by using approxEqual with a large constant, so
actually it's comparing for identity.)
> assert(pow(xd, neg2) == cast(real) (1 / (x * x))); // cast(real) for
> same type.
That won't work on other computers.
> // can't just cast(double) here cause pow() returns value on the FPU
> // so the conversion never happens otherwise
> double a = pow(xd, neg2);
> assert(a == cast(double) (1 / (x * x)));
I don't understand that. xd is of type F=double and the result of pow() is
"Unqual!F" which is also double. FPU or not, the result should behave like a
double. When casting another value to double and the results have equal bit
patterns, they should be compareable with ==.
> You are comparing different types, pow() returns real
If it does, this is the bug.
> You guessed it writefln() under the hood uses Windows' snprintf().
But hopefully not for long time anymore - see my PR:
https://github.com/dlang/phobos/pull/7264
(In reply to jacob from comment #2)
> Really real should mean 128-bit float, it is the next logical step over
> 80-bit floats.
I really, really would be happy if real would be something fixed. Real being
something different on every other machine causes a lot of problems. I would
even prefer if it would not exist at all, rather than this chaos.
--
More information about the Digitalmars-d-bugs
mailing list