В буквальном смысле слова, поставленные в названии,
Почему утверждение «f == (float) (double) f;» неверно?
утверждение «неверно» ни в коей мере не связано с представлением значений с плавающей запятой, а потому, что оно легко оптимизируется любым компилятором, и, таким образом, вы могли бы также сохранить электроны, используемые для его хранения. Это в точности эквивалентно утверждению
1;
или, если хотите, на утверждение (из оригинального вопроса)
x == (int)(double)x;
(который имеет точно такой же эффект, что и в заголовке, независимо от доступной точности типов int
, float
и double
, т. Е. Вообще ничего).
Программирование, в некоторой степени заботящееся о точности, возможно, следует обратить внимание на разницу между оператором и выражением . выражение имеет значение, которое может быть истинным, ложным или чем-то еще, но когда вы добавляете точку с запятой (как вы делали в вопросе), оно становится оператором (как вы его назвали) в вопросе) и при отсутствии побочных эффектов компилятор может свободно его выбросить.