浮點型:數學裡的小數
C語言浮點型有三個類型:float、double、long double
輸入輸出輸出格式符: 默認輸出6位小數
float--%f
double、long double--%lf 不初始化不行
%e 科學記數法,形式如:2.23e2其中e--10
float
內存大小:4位元組,由sizeof(float)獲取
表示範圍:-2^128 ~ +2^128,也即約-3.40282e+38 ~ +3.40e+38
這些數不用記,大家就知道範圍超級大就行了
標準規定:float指數範圍不小於-37~38,e是10,所以有的環境下,精度會高一些
默認範圍:頭文件 float.h宏 FLT_MIN
有效數位:float也叫單精度浮點型
ANSI C規定最小值是6,有的編譯器可能8位,可能7位
注意不是小數的位數,是以第一個非0數字開始數6位
比如:12345.6789,6位精度位指的是12345.6,後面得789就是非精度位,也就是不要考慮了,789將會是不精確存儲。
0.00012456789,6位精度位指的是123456,789就不用考慮是否準確了
double
內存大小:8位元組,由sizeof(double)獲取
表示範圍:-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308
標準規定:double指數範圍不小於-37~38,實際實現-307~308
有效數位:double又叫雙精度浮點型
ANSI C規定最小值是10位, 多數編譯器是15,16,17位左右
大家測一下自己的編譯器就行了,不必記
long double
內存大小:規定不小於double的長度,至少8位元組,不同的編譯器這個字節數可能不同,有的是8,有的是10,有的是12,有的甚至更大。那麼這個字節數就以自己使用的編譯器為準,測一下,知道有這個區別。
表示範圍:那這個就依據大家自己的測試,字節數越大,精度就越大
Visual Studio裡long double跟double是一樣8位元組
大家有測試gcc的,是12位元組
有效數位:ANSI C規定最小值是10位,實際中依據環境具體實現,vs測是18位
後綴:
後綴: L /l 0.2l/0.2L long double數據
無後綴: 0.2 double數據
後綴: F/f 0.2F/0.2f float數據
問題:如果不是對應的,會涉及到類型轉換,類型轉換的結果可能會造成內存截斷,導致數據不是我們想要的,所以需要儘量保持一致
為啥要轉換:只有數值類型一樣了,計算機才能進行計算,不一樣就轉成一樣的
輸入輸出
printf輸出浮點型
%f,%lf這兩個都行,輸出沒有嚴格要求,默認是6位小數,第六位四捨五入
%5.2f 或者lf
5代表整個數佔據屏幕多少個字符位,多了有效果,少了無效果
. 表示小數點
2表示小數的位數,第二位是四捨五入
%e 科學記數法。123.34輸出1.233400e+02
默認6位小數,也可控制%.4e,就輸出1.2334e+02
e是10,
+02是正2次方
輸出這塊格式有很多種,大家不必花太多時間,書上有的試一下就行
scanf輸入浮點型
float %f
double %lf
long double %lf
輸入浮點型,格式符一定要跟類型對應上,否則就出錯
浮點型的存儲
float:1bit(符號位) 8bits(指數位) 23bits(尾數位)
最高位是符號位:1代表負數,0代表正數
指數位:-2^7~2^7-1 -128~127
有效數位(尾數位):2^23 8388608 7位
double:1bit(符號位) 11bits(指數位) 52bits(尾數位)
最高位是符號位:1代表負數,0代表正數
指數位:-2^10~2^10-1 -1024~1023
有效數位(尾數位):2^52 4503599627370496 16位
選擇使用
大家根據自己的需求:float(4位元組,6精度)、double(8位元組,最少10精度,一般都是實現15精度) 常用,long double一般用的不是很多,因為我們不需要那麼高的精度。科學計算一般精度要求非常高,會涉及到精度,應用開發一般用不到,大家用到的時候會選擇就行了,問題不大。