float __a = 97.1, __b = 92.1;
printf ("floats are:\n\t%1$20.15f = 0x%1$08lX\n\t%2$20.15f = 0x%2$08lX\n\t%3$20.15f = 0x%3$08lX\n", __a, __b, __a - __b);
printf - некорректное форматирование
Код:
результат заведомо ложный:
Код:
floats are:
0.000000000000000 = 0x60000000
0.000000000000000 = 0x40584666
-0.117365859448910 = 0x60000000
0.000000000000000 = 0x60000000
0.000000000000000 = 0x40584666
-0.117365859448910 = 0x60000000
однако для типа double все работает правильно
Код:
double __a = 97.1, __b = 92.1;
printf ("doubles are:\n\t%1$20.15f = 0x%1$016llX\n\t%2$20.15f = 0x%2$016llX\n\t%3$20.15f = 0x%3$016llX\n", __a, __b, __a - __b);
printf ("doubles are:\n\t%1$20.15f = 0x%1$016llX\n\t%2$20.15f = 0x%2$016llX\n\t%3$20.15f = 0x%3$016llX\n", __a, __b, __a - __b);
результат:
Код:
doubles are:
97.099999999999994 = 0x4058466666666666
92.099999999999994 = 0x4057066666666666
5.000000000000000 = 0x4014000000000000
97.099999999999994 = 0x4058466666666666
92.099999999999994 = 0x4057066666666666
5.000000000000000 = 0x4014000000000000
Мой компилятор:
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)