C語言深入探索浮點數的使用秘密_第1頁
C語言深入探索浮點數的使用秘密_第2頁
C語言深入探索浮點數的使用秘密_第3頁
C語言深入探索浮點數的使用秘密_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C語言深入探索浮點數的使用秘密目錄一、內存中的浮點數二、浮點數存儲實例三、浮點類型的秘密四、小結

一、內存中的浮點數

浮點數在內存的存儲方式為:符號位,指數,尾數

類型符號位指數尾數float1位(第31位)8位(第23--30位)23位(第0--22位)double1位(第63位)11位(第52--62位)52位(第0--51位)

注:float與double類型的數據在計算機內部的表示法是相同的,但由于所占存儲空間的不同,其分別能夠表示的數值范圍和精度不同。

二、浮點數存儲實例

浮點數的轉換

將浮點數轉換成二進制用科學計數法表示二進制浮點數計算指數偏移后的值

注意:計算指數時需要加上偏移量,而偏移量的值與類型有關。

示例:對于指數6,偏移后的值如下:

float:127+6-133

double:1023+6-1029

實數8.25的在內存中的float表示

8.25的二進制表示:1000.01-1.00001*(2^3)

符號位:0指數:127+3數:00001

內存中8.25的float表示:

01000001000001000000000000000000-0x41040000

下面看一下8.25是不是在內存中表示為0x41040000吧:

#includestdio.h

intmain()

floatf=8.25;

unsignedint*p=(unsignedint*)

printf("0x%08X\n",*p);

return0;

}

下面為輸出結果:

三、浮點類型的秘密

首先看一下int類型和float類型的范圍:

int類型的范圍:[-2^31,2^31-1]

float類型的范圍:[-3.4*10^38,3.4*10^38]

這就出現一個問題:int和float都占4個字節的內存,為什么float卻比int的范圍大得多呢

解釋如下:

float能表示的具體數字的個數與int相同float可表示的數字之間不是連續的,存在間隙float只是一種近似的表示法,不能作為精確數使用由于內存表示法相對復雜,float的運算速度比int慢得多

注意:double與float具有相同的內存表示法,因此double也是不精確的。由于double占用的內存較多,所能表示的精度比float高。

下面看一段float類型的不精確示例代碼:

#includestdio.h

intmain()

floatf=3.1415f;

floatfl=123456789;

printf("%0.10f\n",f);

printf("%0.10f\n",fl);

return0;

}

下面為輸出結果:

這個示例就是表示f和fl小數點的后10位,結果表明,float只是一種近似的表示法,不能作為精確數使用以及float可表示的數字之間不是連續的,存在間隙。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論