-
雙精度浮點數
鎖定
雙精度浮點數(double)是計算機使用的一種數據類型,使用 64 位(8字節) 來存儲一個浮點數。 它可以表示十進制的15或16位有效數字,其可以表示的數字的絕對值範圍大約是:-1.79E+308 ~ +1.79E+308
[1]
。
- 中文名
- 雙精度浮點數
- 外文名
- double
- 標 準
- IEEE 754
- 應用領域
- 計算機
- 範 圍
- -1.79E+308 ~ +1.79E+308
- 佔用空間
- 8個字節
雙精度浮點數定義概述
C、C++中使用到的雙精度浮點數(double)類型是在IEEE二進制浮點數算術標準(ANSI/IEEE Std 754-1985)中定義的。雙精度浮點數(Double)用來表示帶有小數部分的實數,一般用於計算機變成中定義變量,佔用8個字節存儲空間,其數值範圍為-1.7E-308~1.7E+308,雙精度浮點數最多有15或16位十進制有效數字
[2]
。
雙精度浮點數精度
雙精度二進制小數,使用64個比特位存儲。
1位 | 11位 | 52位 |
S(符號位),編號63 | E(階碼位),編號62 ~52 | M(小數位),編號51 ~ 0 |
0表示正,1表示負 | 1~2046 | 任意 |
規約數最小值 | * | 000 0000 0001 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
規約數最大值 | * | 111 1111 1110 | 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 |
轉化為十進制的公式:
,i表示小數位從左到右的位數,第一位i=1,
表示每一位的值,
=0或者1。
雙精度浮點數代碼
#include <stdio.h> int main() { double d = 3.5; printf("%f\r\n", d); printf("%p\r\n", &d); //此處用WinHex查看內存中f的存儲是否和預想的一樣 system("pause"); //此處用WinHex修改d在內存中的數值,並驗證是否的到預期的新浮點數 printf("%f\r\n", d);1 system("pause"); return 0; }
d=3.5(二進制11.1)的double形式為
0100 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
40 0C 00 00 00 00 00 00
小尾方式為 00 00 00 00 00 00 0C 40
d=3.500000001DFBB0
雙精度浮點數拓展延伸
(1)在內存中佔有的字節數不同
(2)有效數字位數不同
(3)所能表示數的範圍不同
- 單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38
- 雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308
(4)在程序中處理速度不同
一般來説,CPU處理單精度浮點數的速度比處理雙精度浮點數快。