0

Почему в результате выполнения следующего кода:

float x=-3.2; 
printf("%d",x+3.2==0) 

Получим ноль а не один, как можно было бы ожидать?

  • переформулируйте пожалуйста заголовок вопроса, он не имеет отношения к самому вопросу – DreamChild Jul 09 '15 at 15:41
  • Вдогонку к предыдущему комментарию http://habrahabr.ru/post/112953/ – Dmi7ry Jul 09 '15 at 15:45
  • @Dmi7ry, полагаю, уместно будет также оставить ссылку на хабр к ответу, так как именно на него будем ссылаться при возникновении вопросов-дубликатов. – awesoon Jul 09 '15 at 15:48
  • Я потерялся. Я в с++ совсем новичек. 1курс. Этот вопрос мне попал на экзамене . я на него так и не ответил. А ответ узнать хотелось бы. – Александр Jul 09 '15 at 15:48
  • Ответ - нельзя сравнивать числа с плавающей точкой на равенство. Почему - расписано в этом ответе. – awesoon Jul 09 '15 at 15:53
  • @soon добавил комментарий к ответу – Dmi7ry Jul 09 '15 at 15:53
  • Вообще-то тут в этом вопросе есть серъезная и важная тонкость - смешение float и double типов в выражениях, которое в первую очередь и приводит к неожиданным результатам. Приликованный "дубликат" рассказывает об общих проблемах плавающей арифметики, но не затрагивает этой важной детали. – AnT stands with Russia Jul 09 '15 at 16:53
  • Рассказы о том, что плавающие числа "нельзя сравнивать на равенство" - это все немножко не о том. В реальности язык С достаточно детерминистичен, чтобы давать некоторые гарантии. Например, вот такой код double f = 3.2; bool b = f == 3.2; обязан инциализировать b как true. А вот код float f = 3.2; bool b = f == 3.2; - не обязан. Это - ключевой момент, не освещенный по ссылке. А вы взяли и закрыли вопрос... – AnT stands with Russia Jul 09 '15 at 16:57

0 Answers0