首頁>Club>
float double long double儲存區別
8
回覆列表
  • 1 # 大漠展翅高飛

    區別在於數值的長度(或者說是佔用記憶體的大小)不一樣。

    浮點型別又叫實型。在turbo C中的單精度型佔4個位元組(32位)記憶體空間,其數值範圍為3.4E-38~3.4E+38,只能提供7位有效數字。雙精度型佔8個位元組(64位)記憶體空間,其數值範圍為1.7E-308~1.7+308,可提供16位有效數字。長雙精度型佔16個位元組(128位)記憶體空間,其數值範圍為1.2E-4932~1.2E+4932。

    注:某些編譯器中long double和double大小一樣。

  • 2 # 大大太陽啊

    C語言裡對float型別資料的表示範圍為-3.4*10^38~+3.4*10^38。double為-1.7*10^-308~1.7*10^308,long double為-1.2*10^-4932~1.2*10^4932.

    型別

    位元(位)數

    有效數字

    數值範圍

    float

    32

    6~7

    -3.4*10^38~+3.4*10^38

    double

    64

    15~16

    -1.7*10^-308~1.7*10^308

    long double

    128/

    18~19

    -1.2*10^-4932~1.2*10^4932

    究竟如何計算該範圍,分析如下:

    對於單精度浮點數(float)來說,符號位一位,指數位8位,尾數23位。指數能夠表示的指數範圍為-128~127。尾數為23位。

    float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是一個隱含著的“1”,由於它是不變的,故不能對精度造成影響。float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。

    其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。float的範圍為-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的範圍為-2^1024 ~ +2^1024,也即-1.79E+308 ~+1.79E+308。

    以float為例,如下表

    符號

    尾數

    指數

    1

    23

    8

    數符(+-)

    小數部分(決定精度)

    -127~128 指數(決定範圍)

    例如:

    +1.1111111111111111111111*2^127(小數點後面23個1,由於尾數的範圍1~2,其最高位總為1,故只需存取小數部分,所以小數為是23位1),約等於2*2^127=3.4*10^38。為3.4*10^38負數亦然。

    Double的計算與此類似,double的符號位為63位,指數為62~52位,共11位。表示的範圍為-1024~1023。尾數為51~0。表示的範圍為+1.1111111111111111..11111*2^1023(小數點後面52個1)為1.7*10^308。負數亦然。

  • 中秋節和大豐收的關聯?
  • 可以介紹R1SE的獨特之處嗎(可團可單人)? 或者壺人語錄?