[英]why -ffast-math option break my bool condition
這是導致問題的程序的關鍵部分,並且程序是完全順序的。
exist_
是bool
類的私有成員,而dbl_num_
是class 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,但是究竟是什么原因破壞了上述簡單的條件檢查呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.