複製鏈接
請複製以下鏈接發送給好友

雙精度浮點數

鎖定
雙精度浮點數(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
任意
採用IEEE754規定的規約數的二進制表示範圍為 [3]  (*表示0或1都行):
規約數最小值
*
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

雙精度浮點數拓展延伸

單精度浮點數(float)與雙精度浮點數(double)的區別如下:
(1)在內存中佔有的字節數不同
(2)有效數字位數不同
(3)所能表示數的範圍不同
  • 單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38
  • 雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308
(4)在程序中處理速度不同
一般來説,CPU處理單精度浮點數的速度比處理雙精度浮點數快。
參考資料
  • 1.    譚浩強 .C程序設計(第4版):清華大學出版社,2010.6
  • 2.    索明何,邢海霞,方偉駿 . C語言程序設計 : 機械工業出版社,2016.2
  • 3.    尹寶林 . C程序設計導引:機械工業出版社,2013.5