簡體   English   中英

為什么std :: isnan()對於具有NAN值的double變量返回false

[英]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 != xfalse的。

最后的嘗試是在函數內部定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM