C語言中特殊浮點數 1 IND00和NAN

2021-08-08 12:41:34 字數 565 閱讀 8840

在c語言的浮點數:float,double中存在一類特別的數:-1.#ind。我們有時會看到它。比如:

float tmp =sqrt(-1);

此時tmp的值就是-1.

#ind

ind其實就是implementation not define的意思,也就是說這個是未定義或者他不是乙個數。

那麼-1.#ind00是如何在記憶體中儲存的呢?根據ieee 745規定:

類別正負號

實際指數

有偏移指數

指數域尾數域

數值nan

*128

2551111 1111

non zero

nan

這類數的指數字為全1,尾數域不為0.

若:a=-1.#ind00

a與任何浮點數(包括自身)的比較結果都為假,即 (a==a) 是 false的

可以使用if(a!=a)為真來判斷a是否為虛數。

例如:float a=sqrt(-1);

那麼:(a!=a)為true

a==a為false

特殊浮點數1 IND 1 INF的判斷

一 特殊浮點數的含義 1.inf inf 這個值表示 無窮大 infinity 的縮寫 即超出了計算機可以表示的浮點數的最大範圍 或者說超過了 double 型別的最大值 例如,當用 0 除乙個整數時便會得到乙個1.inf inf值 相應的,如果用 0 除乙個負整數也會得到 1.inf inf 值。...

C語言中的浮點數比較

浮點數分為單精度和雙精度兩種。在記憶體中的儲存方式按照ieee754標準。通常情況下,單精度佔4個位元組,雙精度佔8個位元組。可以使用sizeof驗證一下。include int main 輸出結果為4 8 x和y變數在十進位制數值上是相等的都是0.1。但是0.1用二進位制表示的時候就會丟失精度,只...

C語言中浮點數的精度問題

1.浮點數出現精度問題的原因 浮點 位元組數有效數字位 float46 double815 實際上一般選用double型別,double有15位有效數字若輸入的數字為16位則會有誤差。int main 2.怎樣才能減少誤差帶來的影響 使用巨集定義乙個eps來判斷誤差 define eps 0.000...