Условный оператот
у = 3.1415927;
i?( х == у ) z = 10;
Не исключено, что переменная z не получит значения 10, так как во время выполнения указанных операторов в х может быть занесено число 3.1415926, а в у-3.1415929.
В таких ситуациях надо сравнивать не сами числа, а проверять, насколько сильно они отличаются друг от друга. Для этого просто берется разность двух переменных и выясняется, не превышает ли она некоторого порога, меньше которого разницу в значениях можно не учитывать (в зависимости от задачи этот порог может колебаться). Только надо брать не простую разность переменных, а ее модуль (понятие из школьного курса, абсолютное положительное значение; модуль числа -2 равен +2, модуль числа -0,001 равен +0,001, модуль числа +3,14 равен +3,14), Ведь разность 4-5 равна -1, а -1 всегда меньше любого сколь угодно малого положительного числа.
Для вычисления модуля математического выражения в Си+-<" применяется стандартная функция abs().
Записать такую проверку с учетом вышесказанного можно, например, так:
if( abs(x-y) < 0.0001 ) z = 10;
В этом случае переменная z получит значение, равное 10, если переменные х и у равны друг другу с точностью до 0,0001. Это стандартный прием сравнения действительных чисел. Он отнюдь не относится только к C++, а применяется и в большинстве прочих языков программирования.
117