1樓:匿名使用者
進行浮點數程式設計時,如果沒有注意,常常會出現輸出類似 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)
而下面的**可以判斷一個浮點數是否是有限的(finite, 即既不是 nan 又不是 infinite):
bool isfinitenumber(double x)
其中,dbl_max 是 中預定義的常量。
把上面兩個函式結合起來,還可以實現一個浮點數是否是 inf 的判斷。
2樓:你真的良心
#include
#include
void main()
可以了,弄半天哦
3樓:德昂當
sqrt()的引數是負數的話,它會輸出錯誤提示。
你輸入的 a,b,c 三個值 進行 b*b-4*a*c 後可能是個負數。
4樓:匿名使用者
當c=0是x=0,可能有資料溢位現象
5樓:頻青無燁磊
double型別應該使用%lf來格式化輸入和輸出`
尤其是錄入資料時不能錯,輸出可以忽視精度.
c語言輸出了 -1.#ind00是什麼意思 5
6樓:匿名使用者
凡是出現-1.#ind00.基本可以肯定是發生了除0錯誤。
你這複雜的計算,看的人眼暈,自己加些除錯語句查一下吧
c語言出現了-1.#ind00的問題
7樓:
#include
#include
void main()
else}}
加個if語句判斷一下根號下面是否大於0,大於零就執行開根號,小於零就列印error!,執行程式電感輸入0.00001,電阻輸入90,結果是前兩個列印error,後面的8個都能正常列印出頻率,你試試。
8樓:鳴天飛鳥
(1/(l*c)-pow(r,2)/(4*pow(c,2)))我試驗了幾個數字,結果
為負值,不能開sqrt,所以結果是
輸出後頻率就一直=-1.#ind00
不知道原來公式是什麼,發出來,修改一下,應該可以了看看結果
9樓:縱學岺貳倩
溢位了,也就是超過了某個變數超過了float型的最大表示範圍e[i]=c[i]/(b[i]-a[i]*e[i-1]);//第一次執行這語句時,就溢位了,分母為0
此時i=1
b[i]=2.0
a[i]=1.0
e[i-1]=2.0
10樓:斂聖戲鵬翼
我不太明白你的題,但是可以給你一些意見,
這個公式是有最值的吧,建議你將這個公式計算的**封裝到一個函式裡,比如是double
sin(int
n)ret1=sin(n);
ret2
=sin(n),
然後就簡單了,在迴圈裡這麼寫
while(ret2
-ret1
<1e-16)n++;
這樣就好了
關於c語言的簡單程式,關於c語言的一個簡單程式
首先,並不十分了解這個程式的本意是什麼,但是錯誤是很明顯的,看提示就該知道了。賦值符號 左邊的運算元必須是合法的左值,表示式不是合法的左值 這也是為什麼可以通過像你那樣寫等於操作的時候可以避免把等號寫成賦值符號的原因 如下修改 a i 100 b i 100 a 10 c i 100 a 10 還有...
簡單的C語言問題,一個簡單的C語言問題
列舉型別中,後面變數值是前面變數的值加1 如basic 3,則assembly 4 同樣 ada 100,則cobol 101,fortran 102 如果一個值沒有給定,就是它前一個變數值 1,ada 100,所以cobol 101,fortran 102 不完整。像是定義一個列舉變數並賦值。1。...
一個簡單的C語言問題,一個簡單c語言小問題?
不知道您說的 a a 出錯了,是什麼現象?您的這種程式,據我所知,在不同的系統中,可能會有不同的現象。您的意圖,似乎是想用 a a 來將字串中的字元d換成字元a,這種操作,在有些系統中是允許的,但有些系統中卻不可以執行。原因是 您這裡沒有給字串 d 在變數區中安排空間,而是直接按 字串常量 的形式寫...