浮點型大小 C語言中的浮點資料型別

2021-10-14 18:27:33 字數 1255 閱讀 8896

我們來討論一下類似於1.234567,0.00001,這類非整數的資料。我們先試試看,int能不能裝這些資料呢?

好像不太行,小數部分都丟失了。那怎麼辦呢?我們需要引入新的型別了。

我們把上面的**中int,用float替代。

printf("%dn",a);中的佔位符%d,我們知道%d是用於整數的,因此%d肯定是不行的。所以我們用%f替換。

這時我們發現,大部分的資料都對了,但是365.12345變成了365.123444。是的,浮點數不能表示無限的精確,它有一定的誤差。並且注意,這個誤差並不是四捨五入的。

c標準規定,float型別必須至少能表示6位有效數字,並且取值範圍至少是10^-37~10+37。

那有沒有精度更高的float型別呢?有的,叫做雙精度浮點型,double。我們把上面的**中的float換成double,%f依然不變。

這下365.12345對的上了。但是,請注意double型別也是有精度範圍的。如果更高精度的資料,double也會出現誤差。我們日常的應用中,不會苛求乙個精度完美的數值,是會允許存在一定誤差範圍的。但是,如果涉及金融等精度關鍵的領域計算時。請參照相關的處理精度關鍵數值的文件,不能簡單的使用float和double。

接下來,我們用sizeof來測量一下float,和double都占用了多少位元組大小吧。

float為4,double為8。

sizeof測量的結果,是乙個整數,表示所占用的位元組大小。位元組數哪有1.5的位元組的。所以這裡用%d來列印。

C語言中的浮點數比較

浮點數分為單精度和雙精度兩種。在記憶體中的儲存方式按照ieee754標準。通常情況下,單精度佔4個位元組,雙精度佔8個位元組。可以使用sizeof驗證一下。include int main 輸出結果為4 8 x和y變數在十進位制數值上是相等的都是0.1。但是0.1用二進位制表示的時候就會丟失精度,只...

c語言整數轉浮點數 浮點數的秘密

我們在學習 c 語言時,通常認為浮點數和小數是等價的,並沒有嚴格區分它們的概念,這也並沒有影響到我們的學習,原因就是浮點數和小數是繫結在一起的,只有小數才使用浮點格式來儲存。其實,整數和小數可以都使用定點格式來儲存,也可以都使用浮點格式來儲存,但實際情況卻是,c 語言使用定點格式儲存整數,使用浮點格...

C語言中浮點數的精度問題

1.浮點數出現精度問題的原因 浮點 位元組數有效數字位 float46 double815 實際上一般選用double型別,double有15位有效數字若輸入的數字為16位則會有誤差。int main 2.怎樣才能減少誤差帶來的影響 使用巨集定義乙個eps來判斷誤差 define eps 0.000...