亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查C+中的雙(或浮點數)是否為NaN

檢查C+中的雙(或浮點數)是否為NaN

C++
江戶川亂折騰 2019-06-24 15:35:46
檢查C+中的雙(或浮點數)是否為NaN有isnan()函數嗎?PS:我加入了MinGW(如果這有區別的話)。通過使用isnan()<math.h>,它并不存在于<cmath>,我是#include剛開始的時候。
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

根據ieee標準,nan值具有奇怪的屬性,涉及它們的比較是假的。也就是說,對于浮子f來說,f != f會是真的如果f是南。

注意,正如下面的一些注釋所指出的,并非所有編譯器在優化代碼時都尊重這一點。

對于任何聲稱使用ieee浮點的編譯器,此技巧工作。但我不能保證將要在實踐中工作


查看完整回答
反對 回復 2019-06-24
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

沒有isnan()函數在當前的C+標準庫中可用。它是在C99定義為宏不是函數。由C99定義的標準庫元素不屬于當前的C+標準ISO/IEC 14882:1998,也不是其更新的ISO/IEC 14882:2003。

2005年提出了“技術報告1”。TR1與C99和C+兼容。盡管它從未被正式采用成為C+標準,但許多GCC 4.0+或Visual C+9.0+C+實現確實提供了TR1功能,所有這些特性或只有一些特性(VisualC+9.0不提供C99數學函數)。

如果TR1可用,那么cmath包括C99元素,如isnan(),?isfinite()等等,但它們被定義為函數,而不是宏,通常在std::tr1::命名空間,盡管許多實現(即Linux上的GCC 4+或MacOSX10.5+上的XCode)將它們直接注入到std::,所以std::isnan定義得很清楚。

此外,C+的一些實現仍然使C99isnan()可用于C+的宏(包括cmathmath.h),什么會引起更多的混亂,開發人員可能會認為這是一種標準行為。

如上文所述,關于VIZE C+的說明沒有提供std::isnan兩樣std::tr1::isnan,但是它提供了一個定義為_isnan()從那時起就有了Visual C+6.0

在XCode上,還有更多的樂趣。如前所述,GCC 4+定義了std::isnan..對于較早版本的編譯器和庫表單XCode,似乎(這里是相關討論),還沒有機會檢查我自己)定義了兩個函數,__inline_isnand()關于英特爾和__isnand()在電源PC上。


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 1565 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號