麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

關于C語言除0引發的思考

2020-01-26 15:56:27
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

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

進行整數除0的時候,程序會檢查出一個錯誤,比如對于這個代碼:
復制代碼 代碼如下:

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

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


運行完以后程序就會警告:warning: division by zero [-Wdiv-by-zero] 
但是對于浮點數,就沒有類似的檢查:
復制代碼 代碼如下:

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

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


不會有警告或者報錯,但是運行完以后會出現這樣的值:-1.#IND00,不知所云。于是上網查了一下,原來是這樣!

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

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

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

復制代碼 代碼如下:

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

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

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

其中,DBL_MAX 是 <float.h> 中預定義的常量。   
把上面兩個函數結合起來,還可以實現一個浮點數是否是 Inf 的判斷。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 欧美成人高清视频 | 欧美成视频在线观看 | 91国内精品久久久久免费影院 | 草人人 | 国产精品一区2区3区 | 久久精品视频12 | 草草视频在线播放 | 91一区二区三区久久久久国产乱 | 99精品视频在线看 | 日韩精品久久久久久久九岛 | 欧美一级黄 | 欧美交在线 | 久久精品视频在线免费观看 | 亚洲3atv精品一区二区三区 | 久草在线手机观看 | 黄色片免费看看 | 一级毛片特黄 | 成年人激情在线 | 9999视频 | 国产91丝袜在线播放 | 国产羞羞网站 | 国产精品久久久久久久娇妻 | 国产99精品 | 亚洲一区二区三区视频免费 | 免费视频a | 久久千人斩 | 黄在线观看在线播放720p | 斗破苍穹在线免费 | a级在线| 狠狠久久 | 在线观看视频日本 | 99re66热这里只有精品8 | 成人做爰高潮片免费视频韩国 | 日日噜噜噜夜夜狠狠久久蜜桃 | 国产va在线观看 | 日日爱夜夜操 | 黄网站免费入口 | 精品国产一级毛片 | 久久久电影电视剧免费看 | 久久av一区二区 | 91综合在线观看 |