當前位置:首頁 » 編程語言 » c語言中inf00什麼意思
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中inf00什麼意思

發布時間: 2023-01-03 09:29:37

c語言編譯提示#INF00

  1. scanf ("%lf",&a);得改成scanf ("%f",&a);,因為a是float型。

  2. 當b>=a不成立時,while (b>=a)不執行,e還是初值0,後面的y=pow(e,-1);就產生了被0除錯誤,顯示#INF00。

⑵ 一個簡單的c語言程序,輸出-1.#IND00..不知道哪裡錯

進行浮點數編程時,如果沒有注意,常常會出現輸出類似 1.#IND, 1.#INF 或者 nan, inf 之類奇怪的輸出。這通常隱含了浮點數操作的異常。

特殊浮點數的含義

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 的判斷。

⑶ c語言程序運行結果為什麼出現1.#INF00

是因為運算結果溢出。

解決辦法,例:

chara=126,則a+45=126+45=172-256=-85

uchara=2,則a-100=-98+256=158

a,b基本類型相同時,有符號與無符號數的轉換:

無符號a-->有符號b

if(a<max_count/2)b=a

elseb=a-[max_count]

有符號數a-->無符號數b

if(a>0)b=a

elseb=a+[max_count]

例1chara=-119;ucharb=a;則b=-119+256=137

例2uchara=137;charb=a;則b=137-256=-119

例3signedcharchr=127;

intsum=127;

chr+=10;

sum+=chr;

sum值是

思路先把chr當成無符號數,chr+=10變成137然後把chr轉化為有符號數137-256=-119-119+sum(127)=8

(3)c語言中inf00什麼意思擴展閱讀

溢出的原因,考慮兩個非負整數x和y,滿足0<=x,y<=(2^w)-1。xy可以被表示為w位無符號數字,然而考慮它們的和的話,我們可以得到0<=x+y<=2^(w+1)-2。這個和需要w+1位來表示。如果再用其他數加上這個結果的話,可能又將需要w+2,w+3位來表示新的結果。

這種持續的「字長膨脹「意味著,如果想要完整地表示算數運算的結果,就不能對字長做任何限制(實際上Lisp就是這樣乾的)。如果限制了數據類型的字長,溢出的發生是不可避免的。由於溢出後的結果往往不是想要的結果,必須對溢出時的情形另做處理,但在此之前我們必須得先能夠判斷什麼時候發生了溢出。

無符號整數的溢出判斷比較簡單:對一個字長w的無符號數加法運算,當x+y>=2^w時,第w+1位被程序捨去,相當於在x+y的和的基礎上減去了2^w。由於x,y<=(2^w)-1,所以有x+y<x(或者x+y<y)。

intuadd_ok(unsignedx,unsignedy){

unsignedsum=x+y;

returnsum>=x;

}

⑷ C語言運行結果中出現「1.#INF00」,為什麼

當你輸入的c,n值過大的時候,運算結果就會溢出(數據過大或過小超過計算機所能存儲的值。。。),就出現你說的那種情況了
你用0.5,0.2試試。。。

⑸ [記] C語言中的nan和inf

在數據處理輸入輸出時,可能遇到數據讀入空值(極大、極小)、運算中分母為0或0.0,對0取對數等操作。將產生nan或inf 。

nan:not a number, 表示 「無效數字」

INF:infinite,表示「無窮大」
超出浮點數的表示範圍(溢出)

⑹ C語言中INF和NAN是什麼意思

inf :infinity (linux) 等同於 #INF:infinity
(windows)

nan :not a
number 等同於
#IND:indeterminate (windows)

注意:1、inf一般是因為得到的數值,超出浮點數的表示範圍(溢出,即階碼部分超過其能表示的最大值);而nan一般是因為對浮點數進行了未定義的操作,如對-1開方。

2、nan==nan
結果是0或false,即不能和nan進行比較,和nan進行比較得到的結果總是false或0。所以可以用函數: int
isNumber(double d){return (d==d);}來判斷d是否為nan,若d是nan則返回0,否則返回非零值。

3、1.0/0.0等於inf,-1.0/0.0等於-inf,0.0+inf=inf;

4、對負數開方sqrt(-1.0)、對負數求對數(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf這些操作都會得到nan。(0/0會產生操作異常;0.0/0.0不會產生操作異常,而是會得到nan)

5、得到inf時就查看是否有溢出或者除以0,得到nan時就查看是否有非法操作。

6、C語言的頭文件<float.h>中,有定義的常量DBL_MAX,這個常量表示「能表示出來的最大的雙精度浮點型數值」。<float.h>中還有常量DBL_MIN,DBL_MIN表示可以用規格化表示的最小的正浮點數,但DBL_MIN並不是最小的正浮點數,因為可以用可以用非規格化浮點數表示的更小。可以用函數:int
isFiniteNumber(double d){return
(d<=DBL_MAX&&d>=-DBL_MAX);}來判斷d是否為一個finite數(既不是inf,又不是nan(加入d為nan,則d參加比較就會得到false(0)值))。

7、1.0/inf等於0.0。

8、inf是可以與其他浮點數進行比較的,即可以參與<=、>+、==、!=等運算。下面這幾個宏(用宏實現的,使用時跟函數的形式基本相同)是判斷一個表達式的結果是否為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。(有些較早的編譯器版本中,無論是正無窮還是負無窮,都返回非零值,不區分正負無窮)。