日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中的nan和inf使用

發布時間:2024/8/24 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中的nan和inf使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文總結nan和inf在C語言當中的含義、產生和判定方法。

C語言當中的nan

表示not a number,等同于 #IND:indeterminate (windows)

產生:

對浮點數進行了未定義的操作;

  • 對負數開方,對負數求對數,0.0/0.0,0.0*inf、inf/inf、inf-inf這些操作都會得到nan。(0/0會產生操作異常;0.0/0.0不會產生操作異常,而是會得到nan);
  • 在GNU中,使用宏:float NAN對浮點數賦值;
  • 判定:

    庫函數方法:(推薦)

    <見后>

    自定義函數:

    int isNumber(double d){return (d==d);}來判斷d是否為nan,若d是nan則返回0,否則返回非零值。

    注意:

  • nan是無序的(unordered),它不大于、小于或等于任何數(包括它自己),所以,nan==nan 結果是0或false;另外將<,>,<=,和>=作用于nan產生一個exception;
  • 得到nan時就查看是否有非法操作;
  • 如果表達式中含有nan,那么表達式的結果為nan;
  • 對于NaN的實現有兩種方式:signaling NaN 和 quiet NaN。signaling NaN就是拋出異常的方式,因此它不需要定義NaN宏。quiet NaN就是即使在計算出現異常的情況下也不拋出異常從而中斷程序的執行、而是將結果表示為一個特殊的值, 因此只有在這種情況下NaN宏才被定義;
  • C語言當中的inf

    infinity (linux),等同于 #INF:infinity (windows)

    產生:

    超出浮點數的表示范圍(溢出,即階碼部分超過其能表示的最大值);

  • 1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;log(0);
  • 在C99中,使用宏:float INFINITY對浮點數賦值;
  • 判定:

    庫函數方法:(推薦)

    <見后>

    自定義函數:

    int isFiniteNumber(double d) {return (d<=DBL_MAX&&d>=-DBL_MAX);} 來判斷d是否為一個finite數(既不是inf,又不是nan(加入d為nan,則d參加比較就會得到false(0)值))。

    注意:

  • +inf大于任何數(除了它自己和nan);-inf小于任何數(除了它自己和nan);
  • 得到inf時就查看是否有溢出或者除以0;
  • 頭文件<float.h>中,有定義的常量DBL_MAX,這個常量表示“能表示出來的最大的雙精度浮點型數值”。<float.h>中還有常量DBL_MIN,DBL_MIN表示可以用規格化表示的最小的正浮點數,但DBL_MIN并不是最小的正浮點數,因為可以用可以用非規格化浮點數表示的更小;
  • inf在C語言表達式中就表示數學里無限的概念,如1.0/inf等于0.0,并可以與其他浮點數進行比較的(可以參與<=、>+、==、!=等運算);
  • 庫函數方法判定inf和nan

    下面這幾個宏(用宏實現的,使用時跟函數的形式基本相同)是判斷一個表達式的結果是否為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。(有些較早的編譯器版本中,無論是正無窮還是負無窮,都返回非零值,不區分正負無窮)。

    參考資料:

  • C語言 inf和nan(http://blog.sina.com.cn/s/blog_8b745a5f01014ifk.html)
  • 20.5.2 Infinity and NaN(http://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html)
  • http://bbs.csdn.net/topics/70279090
  • 轉載于:https://www.cnblogs.com/dosrun/p/3908617.html

    總結

    以上是生活随笔為你收集整理的C语言中的nan和inf使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。