Andrej Mitrovic wrote:
Woops, I got confused. I was thinking about structs, not arrays.

But yeah, in this case a float gets compared to a double and it seems to evaluate to false.

2.4 has no exact representation as a floating point value, as it is 2^^2*0.6, so the mantissa is 3/5. It is rounded after 24 bits for float, but after 53 bits for a double. As a result

        float f = 2.4; // approximately 2.4000001
        double d = 2.4; // approximately 2.3999999999999999
        assert(f == d);

fails, because the comparison is done after converting the truncated float to double (as long as the compiler does not issue SSE instructions with single precision).

In contrast, this

        assert(2.4 == 2.4f);

passes, as the compiler keeps real precision until writing the value to memory and evaluates the expression at compile time.

Reply via email to