On 04.01.2016 09:22, Ali Çehreli wrote:
void main() {
     const l = long.max;

     assert(l != l.to!double);      // passes
     assert(l != cast(double)l);    // FAILS
}

Is there a good explanation for this difference? I would expect both
expressions to be compiled the same way. (I am aware that the !=
operator takes two doubles, meaning that the left-hand side is converted
to 'double' before the comparison.)

I suspect this is due to D allowing floating point operations to happen with higher precision than requested by the program.

The comparisons may be done with `real` precision, and `l.to!double` is cut down to double precision while `cast(double)l` is not.

Reply via email to