您好,登錄后才能下訂單哦!
上節課 簡單介紹了浮點數。計算機程序中的浮點數分為單精度浮點數和雙精度浮點數。
單精度和雙精度精確的范圍不一樣。
計算機里的最基本的存儲單位用位(bit)來表示。bit只能用來存儲0或1。
稍大一點的單位是字節(Byte,簡寫為B)。
再大一級的是千字節(kilo Bytes),用k來表示。
再大一級的單位是兆字節(Mega Bytes),用M來表示。一張照片的大小通常為1~3M。
再大一級的單位為G。一部高清電影的大小通常為1~2G。
再大一級的單位為T。
換算關系為:
1B = 8bit
1k = 1024B = 2^10 B
1M = 1024k = 2^20 B
1G = 1024M = 2^30 B
1T = 1024G = 2^40 B
單精度(float)在計算機中存儲占用4字節,32位,有效位數為7位(6位小數+小數點)。
雙精度(double)在計算機中存儲占用8字節,64位,有效位數為16位(15位小數+小數點)。
不管是float還是double,在計算機中的存儲都遵循IEEE規范,使用二進制科學計數法,都包含三個部分:符號位、指數位和尾數部分。其中float的符號位、指數位(即整數部分)、尾數部分分別為1, 8, 23。雙精度則分別為1, 11, 52。
float
double
精度主要取決于尾數部分的位數,float為23位,最小為2的-23次方,約等于1.19乘以10的-7次方,所以float小數部分只能精確到后面6位,加上小數點算做一位,即有效數字為7位。
類似,double 尾數部分52位,最小為2的-52次方,約為2.22乘以10的-16次方,所以精確到小數點后15位,有效位數為16位。
程序驗證:
#include <stdio.h> int main() { float a = 1.123456789; printf("a = %20.9f\n", a); double b = 2.123456789; printf("b = %20.9f\n", b); return 0; }
注意:這里%20.9f表示浮點數總共有20位,其中小數占9位。不足20位的部分,左側用空格來填充。
運行結果:
a = 1.123456836 b = 2.123456789
從運行結果可以看出,單精度浮點數小數部分只有前6位是準確的,后三位是不準確的。雙精度小數部分9位都是準確的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。