Ответ 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
Я узнал, что сравнение double с использованием ==
не является разумной практикой. Однако мне было интересно, может ли быть проверено, была ли инициализирована двойка, или быть опасным. Например, зная, что переменная doubleVar не может быть равна нулю, если она была инициализирована, безопасно ли это сделать?
Foo::Foo(){
doubleVar = 0.0; // of type double
}
void Foo::Bar(){
if(doubleVar == 0){ // has been initialized?
//...
}else{
//...
}
}
В 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