При выполнении сравнения целочисленное значение будет «повышено» до значения с плавающей запятой. В этот момент вы делаете точное сравнение равенства между двумя числами с плавающей запятой, что почти всегда плохо.
Как правило, у вас должен быть какой-то "эпсилон-шар" или диапазон допустимых значений, и вы проводите сравнение, если два значения достаточно близки друг к другу, чтобы считаться равными. Вам нужна функция примерно так:
int double_equals(double a, double b, double epsilon)
{
return ( a > ( b - epsilon ) && a < ( b + epsilon ) );
}
Если ваше приложение не имеет очевидного выбора epsilon, используйте DBL_EPSILON.