Оценка реляционного оператора в C

Ниже приведен фрагмент кода на C

float k=0.6;

if(k==0.6)
  printf("yes they are equal");
else
  printf("no they are not equal");

Приведенный выше код дает вывод "нет, они не равны". Я работаю на Ubuntu 12.04 gcc 4.4

Я был удивлен и отладил программу. Ответ - нет, потому что значение K не равно 0,6. Я пошагово выполнил программу в GDB и нашел значение k равным 0,600000024. Теперь мой вопрос: почему 0,600000024 назначено k, а почему нет 0,6? когда я назначаю 0,7, k имеет значение 0,69999998. Почему это происходит?

1 ответ

Правильный. Если вы работаете со значениями с плавающей точкой в ​​C, вы должны работать с заданной разницей.

Ты можешь использовать

DBL_EPSILON of the Header float.h
if ((k - 0.6) < DBL_EPSILON){ ... }
Другие вопросы по тегам