Правильно ли сравнивать двойное с нолем, если вы предварительно инициализировали его до нуля?

Я узнал, что сравнение double с использованием == не является разумной практикой. Однако мне было интересно, может ли быть проверено, была ли инициализирована двойка, или быть опасным. Например, зная, что переменная doubleVar не может быть равна нулю, если она была инициализирована, безопасно ли это сделать?

Foo::Foo(){
    doubleVar = 0.0;  // of type double
}

void Foo::Bar(){
    if(doubleVar == 0){ // has been initialized?
        //...
    }else{
        //...
    }
}

Ответы

Ответ 1

В IEEE-754 длинный рассказ:

double d;

d = 0.0;
d == 0.0   // guaranteed to evaluate to true, 0.0 can be represented exactly in double

но

double d;

d = 0.1;
d == 0.1   // not guaranteed to evaluate to true