我有一個代碼區生成NAN值的應用程序。我必須比較相等的值,並根據該值執行其餘的代碼。如何比較C++中的兩個NAN值是否相等?如何在C++中比較兩個NAN值
8
A
回答
17
假設IEEE 754浮點表示法,您不能比較兩個NaN值是否相等。 NaN不等於任何價值,包括其本身。但是,您可以從<cmath>
頭測試,如果他們都是南帶着std::isnan
:
if (std::isnan(x) && std::isnan(y)) {
// ...
}
這僅適用於C++ 11,但是。在C++ 11之前,Boost Math Toolkit提供了一些floating point classifiers。或者,您可以檢查是否值是NaN通過與自身比較:
if (x != x && y != y) {
// ...
}
由於NaN的是,不等於自己唯一的價值。過去,某些編譯器搞砸了,但目前我不確定它的狀態(它似乎與GCC正常工作)。
MSVC提供了一個_isnan函數。
最後的選擇是假設你知道表示是IEEE 754並做一些檢查。顯然這不是最便攜的選擇。
2
任何給定的NaN都不等於任何東西,它將永遠不會等於任何其他NaN,因此將它們相互比較是徒勞無益的。
從GNU文檔:
楠無序的:它並不比任何東西,包括本身等於,大於或小於。如果x的值是NaN,則
x == x
爲假。 source
+1
@Aki erm,0.0/0.0是NaN。我在這裏看不到什麼是「相反的」。 – 2013-03-07 10:47:51
3
關於pre-C++ 11,there's a boost for that, too。
#include <boost/math/special_functions/fpclassify.hpp>
template <class T>
bool isnan(T t); // NaN.
相關問題
- 1. 與NaN比較兩個列表python
- 2. 如何比較兩個日期在c#
- 3. 如何比較兩個向量,在C++
- 4. C# - 比較兩個數組中的值
- 5. 如何比較Java中的兩個值
- 6. 如何比較Java中的兩個值?
- 7. 比較兩個表中的兩個值
- 8. 如何比較列表中的兩個bool類型值c#
- 9. 如何比較C中的兩個位值?
- 10. 如何比較C#中的兩個DataSet列值?
- 11. 如何比較兩個的DateTimePicker值在C#
- 12. C#如何比較兩個有序集?
- 13. 如何比較兩個數組C++
- 14. 如何比較兩個X509Certificate2 c#
- 15. C#比較兩個對象值
- 16. 如何比較兩個MERGEFIELD值?
- 17. 如何使用TextWatcher比較兩個值
- 18. 如何比較兩個數組的值?
- 19. 如何比較兩個變量的值
- 20. 如何比較兩個SQL查詢值
- 21. 如何在C/C++中比較兩個2d char字符數組
- 22. 在C++中比較兩個ISO 8601
- 23. 在C++中比較兩個std :: strings
- 24. 在C#中比較兩個數據源
- 25. 在C中比較兩個csv文件#
- 26. 兩個字典在C#中比較
- 27. 如何通過鍵比較兩個JavaPairRDD並比較值?
- 28. 在Java中使用'=?'比較兩個值
- 29. 在wordpress中比較兩個元值
- 30. 比較兩個類c#
我已經添加了boost解決方案作爲另一個答案。 – 2013-03-07 10:53:16
@BartekBanachewicz啊!我只是把它添加到我的! – 2013-03-07 10:54:20
謝謝大家。如果問題沒有任何意義,我很抱歉。只是急於想知道這是否可能。「思南」功能將爲我的案子做點事情。 – CodeRider 2013-03-07 12:14:26