这是导致问题的程序的关键部分,程序是完全顺序的。
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选项,我得到了打印输出&#34; 0 0 5&#34;
没有选项-ffast-math,我得到了打印输出&#34; 0 0 NAN&#34;
此外,如果我将程序更改为
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选项,我得到了&#34; 0 0 NAN&#34;
比我将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选项,我得到了&#34; 0 0 -5&#34;
我知道-ffast-math打破了IEEE标准,并且它不会检查NAN,但究竟是什么原因打破了上述简单的条件检查?