У меня есть два фрагмента кода, и оба дают разные результаты. Я использую компилятор TDM-GCC 4.9.2, и мой компилятор является 32-битной версией
(размер int равен 4 байта, а минимальное значение в float равно -3.4e38)
Код 1:
int x;
x=2.999999999999999; // 15 '9s' after decimal point
printf("%d",x);
Выход:
2
Код 2:
int x;
x=2.9999999999999999; // 16 '9s' after decimal point
printf("%d",x);
Выход:
3
Почему неявное преобразование отличается в этих случаях?
Это происходит из-за некоторого переполнения указанной действительной константы, и если да, то как это происходит?