C 中float和double型別的精度問題說明

2021-08-18 07:59:40 字數 1005 閱讀 1307

float和double的範圍是由指數的位數來決定的。 

float的指數字有8位,而double的指數字有11位,分布如下: 

float: 

1bit(符號位) + 8bits(指數字) + 

23bits(尾數字) 

double: 

1bit(符號位)+ 11bits(指數字) + 

52bits(尾數字) 

在數學中,特別是在計算機相關的數字(浮點數)問題的表述中,有乙個基本表達法[1]:

value of floating-point= significand x base ^ exponent , with sign --- f.1

譯為中文表達即為: 

(浮點)數值 =      尾數    ×    底數 ^ 指數,(附加正負號)---------------- f.2

於是,float的指數範圍為-127~128,而double的指數範圍為-1023~1024,並且指數字是按補碼的形式來劃分的。其中負指數決定了浮點數所能表達的絕對值最小的數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。 

float的範圍為-2^128 ~ +2^128,也即-3.40e+38 ~ +3.40e+38;double的範圍為-2^1024 ~ +2^1024,也即-1.79e+308 ~ +1.79e+308。 

float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是乙個隱含著的「1」,由於它是不變的,故不能對精度造成影響。 

float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字; 

double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。 

單精度型別(float)和雙精度型別(double)儲存 

java中float和double的區別?

float 單精度型別,精度是8位有效數字 其餘部分四捨五入 取值範圍是10的 38次方到10的38次方,float占用4個位元組的儲存空間。double 雙精度型別,精度是17位有效數字,取值範圍是10的 308次方到10的308次方,double占用8個位元組的儲存空間。若不宣告的,預設小數都用...

C語言float和double輸入問題

統計給定的n個數中,負數 零和正數的個數。input 輸入資料有多組,每組佔一行,每行的第乙個數是整數n n 100 表示需要統計的數值的個數,然後是n個實數 如果n 0,則表示輸入結束,該行不做處理。output 對於每組輸入資料,輸出一行a,b和c,分別表示給定的資料中負數 零和正數的個數。sa...

double和float的區別

float a 0.1 編譯器報錯 warning c4305 initializing truncation from const double to float 原因 在c c 中 也不知道是不是就在vc 中這樣 上述語句等號右邊0.1,我們以為它是個float,但是編譯器卻把它認為是個doub...