Сравнивать напрямую оператором == не рекомендуется из-за особенностей представления и округления. Вместо этого следует проверить, находится ли абсолютное значение разности чисел в пределах некоторого малого порога (эпсилон).
cpp
Более устойчивый подход учитывает относительную ошибку, особенно при сравнении очень больших или очень маленьких чисел:
cpp
Выбор epsilon зависит от требуемой точности и диапазона сравниваемых значений. std::numeric_limits<float>::epsilon() представляет наименьшее число, такое что 1.0 + epsilon отлично от 1.0.
Важно помнить, что сравнение NaN (Not a Number) всегда возвращает false, включая сравнение NaN с самим собой (nan == nan всегда false). Если требуется обрабатывать NaN, это должно делаться отдельно.