int main()
{
int m;
m=1/0;
printf("%d",m);
return 0;
}
int main()
{
double m;
m=1.0/0.0;
printf("%lf",m);
return 0;
}
特殊浮點(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):
新聞熱點(diǎn)
疑難解答
圖片精選