c語言double精度
1. C中的float和double的有效數字和精度各是多少
float和double是有IEEE標準的,不是c語言定的,其它語言也一樣。
double型90%的情況下有效位是16位的10進制數據是對的。來一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--列印的全是偶數
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--列印正確
end
由此可見,大於9007199254740991(2進制52位最大的數),從2^53開始誤差就大於1。
2. c語言中double是什麼意思
double是C語言的一個關鍵字,代表雙精度浮點型。
3. c語言數據類型為何是雙精度型
1、雙精度,單精度指浮點型數,
雙精度 叫 double 型, 單精度 float 型。
double 型 用 64位2進制存放,float 型 用 32位2進制存放。
所以,兩種數 的 最大和最小 數值范圍 不同,數的有效數字個數不同,也就是精度不同。
2、double 型 最大數值 1.7976931348623158e+308
最小正數數值 2.2250738585072014e-308
有效數字 十進制 15 位。
float 型
最大數值 3.402823466e+38F
最小正數數值 1.175494351e-38F
有效數字 十進制 6-7 位。
詳細定義 見編譯器 頭文件 float.h
4. C語言double型精度錯誤
你這個說法錯了:
「按理說double型數據長達8個位元組,可以精確到小數點後15位」
應該是「double型數據可以保證15位有效數字」。但是其整數部分已經佔了8位,所以,最多隻能有7位小數是可以保證精度的。
5. double在c語言中的意思是什麼
double在這里是指將變數i和變數s定義為雙精度實型變數。也就是說:賦給這兩個變數的值將以雙精度實型格式存儲在內存中。
注意事項
1、類型說明符和表達式都必須加括弧(單個變數可以不加括弧),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。
2、無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的數據長度進行的臨時性轉換,而不改變數據說明時對該變數定義的類型。
數據類型
double(雙精度浮點型)是計算機使用的一種資料型別。比起單精度浮點數(float),double(雙精度浮點數)使用 64 位(8位元組) 來儲存一個浮點數。 它可以表示十進制的15或16位有效數字,負值取值范圍為 -1.7976E+308到 -4.94065645841246544E-324,正值取值范圍為 4.94065645841246544E-324到 1.797693E+308
以上內容參考:網路-double
6. c語言中為什麼float型自變數的精確度是6到7位,double型的精確度是15到16位
主要是這兩種變數佔用的內存數不同,float 型4個位元組,32位;double型8個位元組,64位。它們在內存中是按科學計數法來存儲的,而且float和double的精度是由尾數的位數來決定的:
①對於float 型浮點數來說,符號位佔1位,指數位佔8位,尾數位23位,則有2^23 = 8388608,一共七位有效數字(能保證的為6位),即float的精度為6~7位有效數字。
②類似的對於double 型浮點數來說:尾數位52位,2^52= 4503599627370496,共16位,即double型數的精度為15~16位。
7. C語言中的double是最多多少位
雙精度實數,佔用位元組8。
有效數字15~16(因為二進制轉十進制問題)。
數值范圍-1.7*10負308次方~1.7*10的308次方。
當有效數字全部是整數時,即整數有15~16位。
C語言中,輸出double類型(雙精度實型)以及float類型(單精度實型)時,默認輸出6位小數(不足六位以 0 補齊,超過六位按四捨五入截斷)。double a = 1;printf("%lf ", a);輸出會是:1.000000
比如計算平均分,一到兩位小數就足夠了。可是有時六位又不夠,需要更多位小數,比如計算高精度平方根。這時可以用printf的格式控制。如果要輸出n位小數,那麼可以用%.nlf的格式。其中n為數字。
所在函數庫為【ctype.h】
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
intisascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
intiscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
以上內容參考:網路-C語言函數
8. c語言中double精度有幾位小數,float有幾位小數
loat為單精度,佔4位元組(32位)的內存空間,它的數值有效范圍是-10的38次方到10的38次方,只表示7位有效數字。而double為雙精度,8位元組,正負10的308次方之間,能精確到16位。這應該就是他們的的最基本的區別吧。。。
9. C語言中double要輸出幾位小數
1.
C語言中double默認輸出
6
位小數。
2.
如果要控制輸出小數位數,可以格式化輸出。
printf("%.3lf
",
d);
//
"%.3lf"
.3
則是輸出
3
位小數
printf("%.4lf
",
d);
//
"%.4lf"
.4
則是輸出
4
位小數
10. double在c語言中的意思是什麼
double是C語言的一個關鍵字,代表雙精度浮點型,佔8個位元組內存空間,其數值范圍為「1.7E-308~1.7E+308」,雙精度完全保證的有效數字是15位,16位只是部分數值有保證。
C語言中,float和double都屬於浮點數。區別在於:double所表示的范圍,整數部分范圍大於float,小數部分,精度也高於float。
舉個例子:圓周率3.1415926535 這個數字,如果用float來表示,最多隻能精確到小數點後面的6位。而double大約能精確到小數點後面的15位左右。具體精確到幾位,跟所用的編譯器有關,但是各個編輯器編譯器之間,也是相差不大的。
至於整數部分,float表示的整數部分的范圍,就已經夠大了,能表示到萬億級別,已經大到沒邊了。而double所表示的整數范圍,大到更沒邊了。實際開發中,除了個別高精領域,基本上,使用float就足夠了。