Оценка реляционного оператора в 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){ ... }