Floating point constant folding bug?
Johannes Pfau
nospam at example.com
Fri Mar 15 11:35:29 PDT 2013
Forget what I've said, I somehow read that code as a bitwise/reinterpret
cast but of course the code does an integer/float conversion so it's
probably OK.
This is more interesting:
---
float f = float.infinity;
float f2 = float.max;
int i = cast(int) f;
int i2 = cast(int) f2;
writefln("0x%x == int.min(0x%x)", i, int.min);
writefln("0x%x == int.max(0x%x)", cast(int)float.infinity, int.max);
writefln("0x%x == int.min(0x%x)", i2, int.min);
writefln("0x%x == int.max(0x%x)", cast(int)float.max, int.max);
---
const folding expands to int.max, but the same code at runtime expands
to int.min. C does not define what happens if too large float values
are cast into ints. Do you know if D somehow defines this?
(There's a failing test in the test suite which assumes that the result
is int.min in all cases above)
More information about the D.gnu
mailing list