这是导致问题的程序的关键部分,并且程序是完全顺序的。
exist_
是类bool
私有成员,并且dbl_num_
是类double
私有成员
exist_ = false;
dbl_num_ = 0;
std::cout << dbl_num_ << " " ;
if(exist_ == true)
{
dbl_num_ = 5;
}else
{
dbl_num_ = NAN;
}
std::cout << exist_ << " " << dbl_num_ << std::endl;
使用选项 -ffast-math,我得到了打印输出“0 0 5”
没有选项 -ffast-math,我得到了打印输出“0 0 NAN”
此外,如果我将程序更改为
exist_ = false;
dbl_num_ = 0;
std::cout << dbl_num_ << " " ;
if(exist_ == true)
{
std::cout << exist_ << " " ;
dbl_num_ = 5;
}else
{
dbl_num_ = NAN;
}
std::cout << exist_ << " " << dbl_num_ << std::endl;
使用选项-ffast-math,我得到“0 0 NAN”
比我将 NAN 更改为 -5
exist_ = false;
dbl_num_ = 0;
std::cout << dbl_num_ << " " ;
if(exist_ == true)
{
dbl_num_ = 5;
}else
{
dbl_num_ = -5;
}
std::cout << exist_ << " " << dbl_num_ << std::endl;
使用选项-ffast-math,我得到“0 0 -5”
我知道 -ffast-math 破坏了 IEEE 标准,并且它不检查 NAN,但它破坏上述简单条件检查的确切原因是什么?