C語言 9 C語言的浮點資料型別

2021-10-22 03:59:23 字數 2120 閱讀 9456

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列印floatdouble,都使用%f來做佔位符。

這次365.12345也是正確的了。

但是,請注意double型別也是有精度範圍的。如果是更高精度的資料,double也會出現誤差。

我們日常的應用中,不會苛求乙個精度完美的數值,是會允許存在一定誤差範圍的。但是,如果涉及高精度領域的計算時,需要額外使用特殊的方法進行數值計算,以儘量減少誤差。

按照我們之前對整型的經驗,越大範圍的整型型別所佔的空間越大。

那麼對於浮點型別來說,越高精度、越大範圍的浮點型別,應該也會占用越大的空間。

我們用sizeof來測量一下float和double分別占用多大的空間。

floatdouble分別為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位,注意...