欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于C語言除0引發(fā)的思考

 更新時(shí)間:2013年08月14日 09:40:33   作者:  
很多 C 庫都提供了一組函數(shù)用來判斷一個(gè)浮點(diǎn)數(shù)是否是無窮大或 NaN。int _isnan(double x) 函數(shù)用來判斷一個(gè)浮點(diǎn)數(shù)是否是 NaN,而 int _finite(double x) 用以判斷一個(gè)浮點(diǎn)數(shù)是否是無窮大

復(fù)制代碼 代碼如下:

<SPAN style="BACKGROUND-COLOR: rgb(241,254,221)">
<SPAN style="FONT-FAMILY: Microsoft YaHei">   
進(jìn)行浮點(diǎn)數(shù)編程時(shí),如果沒有注意,常常會(huì)出現(xiàn)輸出類似 1.#IND, 1.#INF 或者 nan, inf 之類奇怪的輸出。這通常隱含了浮點(diǎn)數(shù)操作的異常。
</SPAN></SPAN>

進(jìn)行整數(shù)除0的時(shí)候,程序會(huì)檢查出一個(gè)錯(cuò)誤,比如對于這個(gè)代碼:
復(fù)制代碼 代碼如下:

#include <stdio.h>
#include <math.h>

int main()
{
   int m;
   m=1/0;
   printf("%d",m);
    return 0;
}


運(yùn)行完以后程序就會(huì)警告:warning: division by zero [-Wdiv-by-zero] 
但是對于浮點(diǎn)數(shù),就沒有類似的檢查:
復(fù)制代碼 代碼如下:

#include <stdio.h>
#include <math.h>

int main()
{
   double m;
   m=1.0/0.0;
   printf("%lf",m);
    return 0;
}


不會(huì)有警告或者報(bào)錯(cuò),但是運(yùn)行完以后會(huì)出現(xiàn)這樣的值:-1.#IND00,不知所云。于是上網(wǎng)查了一下,原來是這樣!

特殊浮點(diǎn)數(shù)的含義
1.#INF / inf:這個(gè)值表示“無窮大 (infinity 的縮寫)”,即超出了計(jì)算機(jī)可以表示的浮點(diǎn)數(shù)的最大范圍(或者說超過了 double 類型的最大值)。
例如,當(dāng)用 0 除一個(gè)整數(shù)時(shí)便會(huì)得到一個(gè)1.#INF / inf值;相應(yīng)的,如果用 0 除一個(gè)負(fù)整數(shù)也會(huì)得到 -1.#INF / -inf 值。    -1.#IND / nan:這個(gè)的情況更復(fù)雜,一般來說,它們來自于任何未定義結(jié)果(非法)的浮點(diǎn)數(shù)運(yùn)算。"IND"是 indeterminate 的縮寫,而"nan"是 not a number 的縮寫。產(chǎn)生這個(gè)值的常見例子有:對負(fù)數(shù)開平方,對負(fù)數(shù)取對數(shù),0.0/0.0,0.0*∞, ∞/∞ 等。  簡而言之,如果遇到 1.#INF / inf,就檢查是否發(fā)生了運(yùn)算結(jié)果溢出除零,而遇到 1.#IND / nan,就檢查是否發(fā)生了非法的運(yùn)算。     

特殊浮點(diǎn)數(shù)的判斷
很多 C 庫都提供了一組函數(shù)用來判斷一個(gè)浮點(diǎn)數(shù)是否是無窮大或 NaN。int _isnan(double x) 函數(shù)用來判斷一個(gè)浮點(diǎn)數(shù)是否是 NaN,而 int _finite(double x) 用以判斷一個(gè)浮點(diǎn)數(shù)是否是無窮大。

你可能已經(jīng)注意到了,上面兩個(gè)函數(shù)都是以下劃線開頭的,因此在可移植性上可能是存在問題的,那么如何實(shí)現(xiàn)一個(gè)通用的判斷版本呢?
首先,對于 Nan,可以用下面的代碼實(shí)現(xiàn): 

復(fù)制代碼 代碼如下:

bool IsNumber(double x)
{
    // 這里的比較操作看上去總是會(huì)得到 true
    // 但有趣的是對于 IEEE 754 浮點(diǎn)數(shù) NaN 來說總會(huì)得到 false!
    return (x == x);
}

而下面的代碼可以判斷一個(gè)浮點(diǎn)數(shù)是否是有限的(finite, 即既不是 NaN 又不是 infinite):
復(fù)制代碼 代碼如下:

bool IsFiniteNumber(double x)
{
    return (x <= DBL_MAX && x >= -DBL_MAX);
}

其中,DBL_MAX 是 <float.h> 中預(yù)定義的常量。   
把上面兩個(gè)函數(shù)結(jié)合起來,還可以實(shí)現(xiàn)一個(gè)浮點(diǎn)數(shù)是否是 Inf 的判斷。

相關(guān)文章

  • C++內(nèi)存模型和名稱空間詳解

    C++內(nèi)存模型和名稱空間詳解

    這篇文章主要給大家介紹了關(guān)于C/C++中的內(nèi)存模型和名稱空間詳解,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c/c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧
    2021-09-09
  • C語言利用面試真題理解指針的使用

    C語言利用面試真題理解指針的使用

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-08-08
  • OpenCV實(shí)現(xiàn)車牌字符分割(C++)

    OpenCV實(shí)現(xiàn)車牌字符分割(C++)

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)車牌字符分割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++語言const 關(guān)鍵字使用方法圖文詳解

    C++語言const 關(guān)鍵字使用方法圖文詳解

    在類中,如果你不希望某些數(shù)據(jù)被修改,可以使用const關(guān)鍵字加以限定。const 可以用來修飾成員變量、成員函數(shù)以及對象
    2020-01-01
  • Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

    Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

    這篇文章主要為大家介紹了在Qt數(shù)據(jù)庫應(yīng)用開發(fā)中的一些經(jīng)驗(yàn)總結(jié),以及一些組件的使用介紹。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • Qt利用ffmpeg實(shí)現(xiàn)音視頻同步

    Qt利用ffmpeg實(shí)現(xiàn)音視頻同步

    這篇文章主要為大家詳細(xì)介紹了Qt如何利用ffmpeg實(shí)現(xiàn)音視頻同步的功能,文中的示例代碼講解詳細(xì),對大家深入了解Qt有一定的幫助,需要的可以參考一下
    2023-01-01
  • Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼

    Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼

    本篇文章主要介紹了Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • C語言詳細(xì)實(shí)現(xiàn)猜拳游戲流程

    C語言詳細(xì)實(shí)現(xiàn)猜拳游戲流程

    在學(xué)習(xí)了循環(huán)、分支、和函數(shù)之后,可以寫一些簡單的小游戲來給自己的編程之路增添一份樂趣。不僅提升了編碼能力,還可以邊學(xué)邊玩,簡直妙哉妙哉
    2022-05-05
  • c++訪問私有private成員變量的常用方法

    c++訪問私有private成員變量的常用方法

    這篇文章主要介紹了c++訪問私有private成員變量的常用方法,需要的朋友可以參考下
    2020-08-08
  • VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟

    VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟

    本文主要介紹了VS2019安裝cbd調(diào)試器的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12

最新評(píng)論