On 02/07/2015 01:33 PM, Kenny wrote:
The above code snippet works correctly when I use LDC compiler (it finds
expected 'f' value and prints it to console). I'm wondering is it a bug
in DMD?
p.s. the final code used by both compilers:
import std.stdio;
import std.conv;
int main(string[] argv)
{
const float eps = 1.0f;
float f = 0.0f;
while (f + eps != f)
f += 1.0f;
writeln("eps = ", eps, ", max_f = ", f);
return 0;
}
OK, ignore some of my earlier response. :)
The code above works with dmd git head 64-bit compilation and prints the
following:
eps = 1, max_f = 1.67772e+07
You can use the %a format specifier when debugging this issue. It allows
you see the bits of the floating point value:
writefln("eps: %a", 0.1);
double 0.1 on my system:
eps: 0x1.999999999999ap-4
Ali