雙精度浮點數

雙精度浮點數（）是用来表示浮点数的一种資料型別，在计算机中占据64比特（8字节）大小，因此也称为float64或FP64。在IEEE 754中这种64位二进制格式被正式称为binary64格式，而在IEEE 754-1985中被称为double，即双精度。

比起單精度浮點數僅有 32 位元（4字节），雙精度浮點數使用 64 位元（8字节） 來儲存一個浮點數。
它可以表示二進位制的53-{位}-有效數字，其可以表示的数字的绝对值范围为。

 格式 
 -{sign bit}-（符號）：1位，用來表示正負號
 -{exponent}-（指數）：11位，用來表示次方數
 -{mantissa}-（尾數）：52位，由于省略了首位必定存在的“1”，实际上为53位，用來表示精確度

File:IEEE_754_Double_Floating_Point_Format.svg

符号
0代表數值為正，1代表數值為負。

指數
共有11個位元 ， 使用「」，
有2個例外分別為 
「11個位元皆為0」
「11個位元皆為1」

並且以1023為偏移標準，表示實際指數為0，因此指數範圍為 -1022 到 +1023：

指數 00016 和 7ff16 具有特殊意義：

000000000002 = 00016當尾數為0時為±0，尾數不為0時為非正規形式的浮點數。

111111111112 = 7ff16當尾數為0時為∞，尾數不為0時為NaN。

尾數
在二進位的「科學記號」，數字被表示為：

二進位的「科學記號」（a×2n）的a的範圍是大於等於1而小於2，例如：

 二進位制的   可以規格化為 ，儲存時尾数只需要儲存1101即可。
 二進位制的   可以規格化為 ，儲存時尾數只需要儲存10011即可。

小結
根據以上的敘述，一個雙精度浮點數所代表的數值為：

 例子 
 0 01111111111 00000000000000000000000000000000000000000000000000002 ≙ 3FF0 0000 0000 000016 ≙ +20 × 1 = 1 0 01111111111 00000000000000000000000000000000000000000000000000012 ≙ 3FF0 0000 0000 000116 ≙ +20 × (1 + 2−52) ≈ 1.0000000000000002, the smallest number > 1 0 01111111111 00000000000000000000000000000000000000000000000000102 ≙ 3FF0 0000 0000 000216 ≙ +20 × (1 + 2−51) ≈ 1.0000000000000004 0 10000000000 00000000000000000000000000000000000000000000000000002 ≙ 4000 0000 0000 000016 ≙ +21 × 1 = 2 1 10000000000 00000000000000000000000000000000000000000000000000002 ≙ C000 0000 0000 000016 ≙ −21 × 1 = −2

 0 10000000000 10000000000000000000000000000000000000000000000000002 ≙ 4008 0000 0000 000016 ≙ +21 × 1.12 = 112 = 3 0 10000000001 00000000000000000000000000000000000000000000000000002 ≙ 4010 0000 0000 000016 ≙ +22 × 1 = 1002 = 4 0 10000000001 01000000000000000000000000000000000000000000000000002 ≙ 4014 0000 0000 000016 ≙ +22 × 1.012 = 1012 = 5 0 10000000001 10000000000000000000000000000000000000000000000000002 ≙ 4018 0000 0000 000016 ≙ +22 × 1.12 = 1102 = 6 0 10000000011 01110000000000000000000000000000000000000000000000002 ≙ 4037 0000 0000 000016 ≙ +24 × 1.01112 = 101112 = 23 0 01111111000 10000000000000000000000000000000000000000000000000002 ≙ 3F88 0000 0000 000016 ≙ +2−7 × 1.12 = 0.000000112 = 0.01171875 (3/256)
 0 00000000000 00000000000000000000000000000000000000000000000000012 ≙ 0000 0000 0000 000116 ≙ +2−1022 × 2−52 = 2−1074  ≈ 4.9406564584124654 × 10−324 (Min. subnormal positive double) 0 00000000000 11111111111111111111111111111111111111111111111111112 ≙ 000F FFFF FFFF FFFF16 ≙ +2−1022 × (1 − 2−52)  ≈ 2.2250738585072009 × 10−308 (Max. subnormal double) 0 00000000001 00000000000000000000000000000000000000000000000000002 ≙ 0010 0000 0000 000016 ≙ +2−1022 × 1  ≈ 2.2250738585072014 × 10−308 (Min. normal positive double) 0 11111111110 11111111111111111111111111111111111111111111111111112 ≙ 7FEF FFFF FFFF FFFF16 ≙ +21023 × (1 + (1 − 2−52))  ≈ 1.7976931348623157 × 10308 (Max. Double)

 0 00000000000 00000000000000000000000000000000000000000000000000002 ≙ 0000 0000 0000 000016 ≙ +0 1 00000000000 00000000000000000000000000000000000000000000000000002 ≙ 8000 0000 0000 000016 ≙ −0 0 11111111111 00000000000000000000000000000000000000000000000000002 ≙ 7FF0 0000 0000 000016 ≙ +∞ (positive infinity) 1 11111111111 00000000000000000000000000000000000000000000000000002 ≙ FFF0 0000 0000 000016 ≙ −∞ (negative infinity) 0 11111111111 00000000000000000000000000000000000000000000000000012 ≙ 7FF0 0000 0000 000116 ≙ NaN (sNaN on most processors, such as x86 and ARM) 0 11111111111 10000000000000000000000000000000000000000000000000012 ≙ 7FF8 0000 0000 000116 ≙ NaN (qNaN on most processors, such as x86 and ARM) 0 11111111111 11111111111111111111111111111111111111111111111111112 ≙ 7FFF FFFF FFFF FFFF16 ≙ NaN (an alternative encoding of NaN)

 0 01111111101 01010101010101010101010101010101010101010101010101012  = 3fd5 5555 5555 555516 ≙ +2−2 × (1 + 2−2 + 2−4 + ... + 2−52)  ≈ 1/3

 0 10000000000 10010010000111111011010101000100010000101101000110002  = 4009 21fb 5444 2d1816 ≈ pi

 参考文献 

 參閱 
 IEEE二进制浮点数算术标准（IEEE 754）
 浮点数

Category:数据类型
Category:二进制算术
Category:計算機算術