c語言系列課8:一文吃透c語言整型
c語言系列課7:10分鐘學會c語言基礎語法
c語言系列課6:hello world 第乙個c語言程式
c語言系列課5:visual studio整合開發環境的搭建
… …我們來討論一下類似於1.234567,0.00001,這類非整數的資料。
我們可以先試試看,int能不能裝這些資料呢?
好像不太行,小數部分都丟失了。那怎麼辦呢?
這時候我們就需要引入新的型別了——浮點型別。
我們把上面**中的整型int
,用單精度浮點型float
替代。
之後,再將printf("%d\n",a);
中的佔位符是%d
,所以我們用%f
替換。(%d
佔位符用於整型,%f
佔位符用於浮點型)
替換完成之後,我們再來試試看。
將int
替換成float
之後,大部分的資料都是正確的。但是365.12345
變成了365.123444
,很明顯精度出現了誤差。
這是因為,浮點數並不能表示無限的精確,它會存在著一定的誤差。
c標準規定,float型別必須至少能表示6位有效數字,並且取值範圍至少是10^-37~10+37。
所以,使用float來裝365.12345時,前面六位數值是準確的,但是後面的數值略有誤差。
有沒有比float,精度更高的型別呢?有的,叫做雙精度浮點型double
。我們把上面**中的float
換成double
。
那麼printf函式
中使用的佔位符需要修改嗎?
答案是不需要,因為printf是乙個可變引數函式,而可變引數函式有乙個特殊的地方,傳入的可變引數中,flaot會自動公升級為double。
所以,%f
其實就是double
的佔位符。用printf
列印float
或double
,都使用%f
來做佔位符。
這次365.12345
也是正確的了。
但是,請注意double
型別也是有精度範圍的。如果是更高精度的資料,double
也會出現誤差。
我們日常的應用中,不會苛求乙個精度完美的數值,是會允許存在一定誤差範圍的。但是,如果涉及高精度領域的計算時,需要額外使用特殊的方法進行數值計算,以儘量減少誤差。
按照我們之前對整型的經驗,越大範圍的整型型別所佔的空間越大。
那麼對於浮點型別來說,越高精度、越大範圍的浮點型別,應該也會占用越大的空間。
我們用sizeof來測量一下float和double分別占用多大的空間。
float
,double
分別為4,8個位元組。驗證了我們之前對於越大範圍,越高精度的型別所佔空間越大的設想。
浮點型大小 C語言中的浮點資料型別
我們來討論一下類似於1.234567,0.00001,這類非整數的資料。我們先試試看,int能不能裝這些資料呢?好像不太行,小數部分都丟失了。那怎麼辦呢?我們需要引入新的型別了。我們把上面的 中int,用float替代。printf dn a 中的佔位符 d,我們知道 d是用於整數的,因此 d肯定是...
9 C語言基本資料型別
有符號數 記憶體空間最高位元組是符號位。無符號數 記憶體空間最高位元組是資料。int 預設是有符號的.一般,有符號數用於計算,無符號數表示資料.對於右移運算,有符號數無法進行運算,因為最高位永遠是符號位 無符號數,更多的同於資料的採集 訪問 有符號數代表數字 浮點型與整型在記憶體中的儲存結構不同 浮...
C語言 浮點數格式
description 輸入n 0 n 10000 個浮點數,要求把這n個浮點數重新排列 並非排序,而是對齊 後再輸出。每個浮點數中都有小數點且總長度不超過50位。input 第1行是乙個正整數n n 10000 後面n行每行乙個浮點數,每個浮點數中都保證小數點會出現。浮點數的長度不超過50位,注意...