NaN Inf(OC)
一、什么是NaN?
NaN(Not a Number)是一個(gè)特殊的數(shù)值,它用于表示一個(gè)本來要返回?cái)?shù)值的操作數(shù)但未返回?cái)?shù)值的情況。
二、NaN的產(chǎn)生
先看下面這張截圖,截圖中包括產(chǎn)生的代碼和類型的打印。
?
從上圖不難看出,之所以會(huì)出現(xiàn)NaN是因?yàn)閷loat數(shù)進(jìn)行了不正當(dāng)操作。
產(chǎn)生場景:對浮點(diǎn)數(shù)(float)進(jìn)行了未定義的操作:
①對負(fù)數(shù)開方,對負(fù)數(shù)求對數(shù),0.0/0.0,0.0*inf、inf/inf、inf-inf這些操作都會(huì)得到NaN;
②在GNU中,使用宏:float NAN對浮點(diǎn)數(shù)賦值。
三、判定方法
使用系統(tǒng)提供的判定的方法:isnan(x)
四、注意
1.nan是無序的(unordered),它不大于、小于或等于任何數(shù)(包括它自己),所以,nan==nan 結(jié)果是0或false;另外將<,>,<=,和>=作用于nan產(chǎn)生一個(gè)exception;
2.得到nan時(shí)就查看是否有非法操作;
3.如果表達(dá)式中含有nan,那么表達(dá)式的結(jié)果為nan;
4.對于NaN的實(shí)現(xiàn)有兩種方式:signaling NaN 和 quiet NaN。signaling NaN就是拋出異常的方式,因此它不需要定義NaN宏。quiet NaN就是即使在計(jì)算出現(xiàn)異常的情況下也不拋出異常從而中斷程序的執(zhí)行、而是將結(jié)果表示為一個(gè)特殊的值, 因此只有在這種情況下NaN宏才被定義。
五、什么是Inf
infinity (linux),等同于 #INF:infinity (windows)
六、產(chǎn)生(可參考NaN產(chǎn)生情況中的圖)
超出浮點(diǎn)數(shù)的表示范圍(溢出,即階碼部分超過其能表示的最大值);
①1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;log(0);
②在C99中,使用宏:float INFINITY對浮點(diǎn)數(shù)賦值;
七、判定方法
使用系統(tǒng)提供的判定的方法:isinf(x)
八、注意點(diǎn)
1.+inf大于任何數(shù)(除了它自己和nan);-inf小于任何數(shù)(除了它自己和nan);
2.得到inf時(shí)就查看是否有溢出或者除以0;
3.頭文件<float.h>中,有定義的常量DBL_MAX,這個(gè)常量表示“能表示出來的最大的雙精度浮點(diǎn)型數(shù)值”。<float.h>中還有常量DBL_MIN,DBL_MIN表示可以用規(guī)格化表示的最小的正浮點(diǎn)數(shù),但DBL_MIN并不是最小的正浮點(diǎn)數(shù),因?yàn)榭梢杂每梢杂梅且?guī)格化浮點(diǎn)數(shù)表示的更小;
4.inf在C語言表達(dá)式中就表示數(shù)學(xué)里無限的概念,如1.0/inf等于0.0,并可以與其他浮點(diǎn)數(shù)進(jìn)行比較的(可以參與<=、>+、==、!=等運(yùn)算);
轉(zhuǎn)載于:https://www.cnblogs.com/metersj/p/8065764.html
總結(jié)
以上是生活随笔為你收集整理的NaN Inf(OC)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows环境wampserver3
- 下一篇: SQL AVG() 函数