Taken from: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 --- import std.stdio; void test(double x, double y) { double y2 = x + 1.0; if (y != y2) writeln("error"); } void main() { immutable double x = .012; // Remove 'immutable', and 'error' is not printed. double y = x + 1.0; test(x, y); } --- This is a GCC bug with a front-end fix. It may be a good idea to conform to this behaviour in D (GDC) too. If not at least because the reference compiler doesn't appear to optimise aggressively enough to get this problem.
This is the original GCC C front-end patch, for reference. https://gcc.gnu.org/ml/gcc-patches/2008-11/msg00105.html
*** This bug has been marked as a duplicate of bug 200 ***