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.
