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