From: Martin W. <mai...@ma...> - 2012-08-04 22:34:31
|
After updating to the latest version of the MinGW GCC (4.7.0), one of my regression tests started failing. I've isolated the problem to the following test case: #include <stdio.h> #include <math.h> volatile double scale = 3.0; int main(int argc, char *argv[]) { printf("%20.20f\n", 123000.0 / pow(10.0, scale)); printf("%d\n", (int)(123000.0 / pow(10.0, scale))); printf("%d\n", (int)(123000.0 / pow(10.0, 3.0))); } The output from this is: 123.00000000000000000000 122 123 whereas I would have expected the middle number to also be 123. Is this allowed behaviour, or is it a bug? I realise double to int conversion is not necessarily exact, but it appears that the double value is an exact representation of the desired integer value, so I would have expected it to survive conversion. As shown by the third line of output, it does when the expression is evaluated at compile time. |