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

Reply via email to