Плавающий- point == когда-нибудь ОК?

Как раз сегодня я наткнулся на стороннее программное обеспечение, которое мы используем, и в их образце кода было что-то вроде этого:

// Defined in somewhere.h
static const double BAR = 3.14;

// Code elsewhere.cpp
void foo(double d)
{
    if (d == BAR)
        ...
}

Я знаю о проблеме с плавающей запятой и их представление, но это заставило меня задуматься, есть ли случаи, когда float == float подойдет? Я не спрашиваю, когда может работать, но когда это имеет смысл и работает.

Кроме того, как насчет вызова типа foo (BAR) ? Будет ли это всегда сравниваться одинаково, поскольку они оба используют одну и ту же static const BAR ?

52
задан Peter Mortensen 2 July 2018 в 08:13
поделиться