當前位置:首頁 » 編程語言 » c語言判斷nan

c語言判斷nan

發布時間: 2025-05-01 12:57:13

1. c語言中INF和NAN是什麼意思

inf :infinity (linux) 等同於 #INF:infinity
(windows)

nan :not a
number 等同於
#IND:indeterminate (windows)

注意:1、inf一般是因為得到的數值,超出浮點數的表示範圍(溢出,即階碼部分超過其能表示的最大值);而nan一般是因為對浮點數進行了未定義的操作,如對-1開方。

2、nan==nan
結果是0或false,即不能和nan進行比較,和nan進行比較得到的結果總是false或0。所以可以用函數: int
isNumber(double d){return (d==d);}來判斷d是否為nan,若d是nan則返回0,否則返回非零值。

3、1.0/0.0等於inf,-1.0/0.0等於-inf,0.0+inf=inf;

4、對負數開方sqrt(-1.0)、對負數求對數(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf這些操作都會得到nan。(0/0會產生操作異常;0.0/0.0不會產生操作異常,而是會得到nan)

5、得到inf時就查看是否有溢出或者除以0,得到nan時就查看是否有非法操作。

6、C語言的頭文件<float.h>中,有定義的常量DBL_MAX,這個常量表示「能表示出來的最大的雙精度浮點型數值」。<float.h>中還有常量DBL_MIN,DBL_MIN表示可以用規格化表示的最小的正浮點數,但DBL_MIN並不是最小的正浮點數,因為可以用可以用非規格化浮點數表示的更小。可以用函數:int
isFiniteNumber(double d){return
(d<=DBL_MAX&&d>=-DBL_MAX);}來判斷d是否為一個finite數(既不是inf,又不是nan(加入d為nan,則d參加比較就會得到false(0)值))。

7、1.0/inf等於0.0。

8、inf是可以與其他浮點數進行比較的,即可以參與<=、>+、==、!=等運算。下面這幾個宏(用宏實現的,使用時跟函數的形式基本相同)是判斷一個表達式的結果是否為inf、nan或其他:

頭文件:include<math.h>

宏的用法(類似於函數原型):int fpclassify(x);

int
isfinite(x);

int
isnormal(x);

int isnan(x);

int isinf(x);

具體用法:

1、int
fpclassify(x)
用來查看浮點數x的情況,fpclassify可以用任何浮點數表達式作為參數,fpclassify的返回值有以下幾種情況。

FP_NAN:x是一個「not a number」。

FP_INFINITE: x是正、負無窮。

FP_ZERO: x是0。

FP_SUBNORMAL: x太小,以至於不能用浮點數的規格化形式表示。

FP_NORMAL: x是一個正常的浮點數(不是以上結果中的任何一種)。

2、int
isfinite(x)
當(fpclassify(x)!=FP_NAN&&fpclassify(x)!=FP_INFINITE)時,此宏得到一個非零值。

3、int
isnormal(x) 當(fpclassify(x)==FP_NORMAL)時,此宏得到一個非零值。

4、int
isnan(x) 當(fpclassify(x)==FP_NAN)時,此宏返回一個非零值。

5、int
isinf(x) 當x是正無窮是返回1,當x是負無窮時返回-1。(有些較早的編譯器版本中,無論是正無窮還是負無窮,都返回非零值,不區分正負無窮)。

2. C語言中INF和NAN是什麼意思

在C語言中,INF和NAN是兩個特殊的浮點數概念。INF代表無窮大,當計算結果超出浮點數表示範圍時,通常表示為正無窮(在Linux中)或#INF:infinity(在Windows中)。NAN則是「非數字」,表示浮點數運算中的未定義狀態,如開平方根或對負數求對數等操作的結果,其在Windows中表現為#IND:indeterminate。

當遇到INF,通常意味著發生了數值溢出或除以零的情況。NAN與NAN的比較總是返回false或0,因此不能直接比較。為了檢測NAN,可以使用函數isNumber(double),如果輸入為NAN,則返回0,否則返回非零值。

在C語言的頭文件中,提供了幾個宏來判斷浮點數的類型,如fpclassify、isfinite、isnormal、isnan和isinf。fpclassify用於識別NAN、無窮大、零、非規格化和正常數,isfinite僅返回非無窮非NAN的結果,isnormal表示正常的浮點數,isnan檢測NAN,而isinf則區分正負無窮大。

例如,1.0/0.0會得到正無窮(inf),而sqrt(-1.0)或0.0/0.0會得到NAN。在進行比較或運算時,如1.0/inf,結果會是0.0。通過這些宏,程序員可以准確地處理這些特殊浮點數情況,確保程序的正確性和穩定性。

3. c語言的問題,為什麼輸出是nan

NaN 的意思是 「Not a Number」, 不是一個數值,或無法表示的數值,例如溢出了, 負數求對數了,分母為0了。

用戶可以加入一些列印語句,檢查數據是否有錯。

再有 A/a 這種運算是整除運算,不能算做是浮點運算。

(3)c語言判斷nan擴展閱讀:

C語言函數

C語言log()函數:返回x的自然對數(以e為底的對數)

C語言ldiv()函數:求兩個數的商和余數(針對long類型)

C語言ceil()函數:求不小於x的最小整數(向上取整)

C語言floor()函數:求不大於x的最大整數(向下取整)

intiscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)

double cabs(struct complex znum) 返回復數znum的絕對值

4. C語言中出現nan(ind)什麼意思

nan 是 "not a number" 的縮寫, 即計算結果 不是個 數。
例如: 32 位 數 實際指數 128 ,數符 1 或 0,指數域 二進制 1111 1111。尾數域 等於非零。
ind 是 indeterminate 的縮寫,即無法確定 是什麼。
對負數開平方,對負數取對數,0.0除以0.0,0.0乘無窮大∞, 無窮大∞除以無窮大∞ 等錯誤都會 得 到 它。

熱點內容
比色演算法 發布:2025-05-01 16:41:06 瀏覽:283
為何綁定騰訊雲伺服器ip不能用 發布:2025-05-01 16:26:52 瀏覽:297
ecu演算法 發布:2025-05-01 16:26:44 瀏覽:718
安卓手機用戶怎麼安裝變聲器 發布:2025-05-01 16:26:43 瀏覽:780
coreutils源碼 發布:2025-05-01 16:19:16 瀏覽:345
博物館采訪問題 發布:2025-05-01 16:17:11 瀏覽:495
汽車中控安卓導航哪個牌子好 發布:2025-05-01 15:48:42 瀏覽:964
釘釘開發軟體需要什麼配置 發布:2025-05-01 15:46:38 瀏覽:568
安卓手機怎麼添加ic門禁卡 發布:2025-05-01 15:46:32 瀏覽:940
阿里雲伺服器怎麼升級系統 發布:2025-05-01 15:42:41 瀏覽:661