![](/img/trans.png)
[英]Why does std::isnan( IntegralType arg ) cast arg to double?
[英]Why does std::isnan() return false for double variable with NAN value
我決定使用NAN
(也試過std::numeric_limits::quiet_NaN()
)作為函數參數的默認值,但是當我嘗試使用std::isnan
檢查它時,它返回false
。 同時使用qDebug()
將值打印到控制台,我看到了nan
。
此外,我試圖使用x != x
規則檢查NAN
。 它適用於NAN != NAN
,但是對於x != x
是false
的。
最后的嘗試是在函數內部定義NAN
雙變量並嘗試使用這兩種方法進行檢查,但它會導致相同的結果。
我無法理解什么是錯的。
例:
double abc = NAN;
qDebug()<< abc << (abc != abc) << std::isnan(abc);
輸出:
nan false false
我不知道我們在項目中使用-ffast-math
。 這就是導致問題的原因。 感謝您的關注和評論。 如果您使用-ffast-math
則沒有解決方案。 你只需要尋找另一種方法來解決你的問題(沒有NAN
)
std::optional<double>
會這樣做,然后在你閑暇時你可以專門使用顯式NAN位模式來指示未設置的值。 該值不會通過FPU寄存器傳遞, -ffast-math
不會影響它。 您不僅可以清楚地指出可選參數的意圖,而且還可以使其符合編譯器:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.