c語言中的float資料型別的有效數字為什麼是67位

2021-12-28 02:28:27 字數 1450 閱讀 4717

1樓:金色潛鳥

float資料 機器內是2進位制數,

1位符號位

8位指數位

23位「尾數」位

共32 位 2進位制數。

平時講 有效數字 是6~7位 ,指10進位制。

通常程式輸入的數是10進位制,進入機器後要化成2進位制,計算完又轉十進位制輸出。

10進位制到2進位制,2進位制到10進位制 轉換,有的數化不淨,有的數化得淨。

如同10進位制分數化10進位制小數,有的化得淨(例如 4分之1,變0.25),有的化不淨(例如 3分之1,變0.33333....)。

10進位制到2進位制,2進位制到10進位制 轉換,化得淨的效數字7位,化不淨的效數字6位,因為最後一位有舍入誤差。

例如:float x,y;

x=0.51; // 化不淨

y=0.5; // 化得淨

printf("x=%.8f y=%.8",x,y); // 輸出 0.50999999 0.50000000

2樓:

有效數字是和所佔記憶體的位元組數有關,float佔4個位元組,然後再用二進位制算出它的範圍

c語言中,float型別的有效位數不是7位,double的有效位數不是16位嗎?為什麼這個輸出結果 50

3樓:匿名使用者

這個有效位是指小數點後的位數

4樓:匿名使用者

建議搜尋一下 ieee754 看看浮點數的詳細定義。

c語言中.float都說是是顯示7位有效數字

5樓:銀河群峰之巔

7位有效數字的意思是,超過7位的就沒有意義了。你這個結果四捨五入到7位,你看看是多少。

你的數字會變是因為, 十進位制是有限小數的數,轉到二進位制可能是無限小數。0.2就是。

6樓:匿名使用者

因為a不是2222.2,在電腦裡存的是2進位制,2222.2轉成2進位制會有誤差。

7樓:伏無

是的,在c語言中float是顯示小數點後六位小數,如果你想縮小的話那就在最後的printf(".2f",a);

至於點後面要多少你可以隨便更改。

至於說為什麼數字變小了呢,是因為計算機本來就不擅長對小數的處理,這有一個精度的問題。

8樓:記住回憶

顯示小數點後的6位有效數字。

9樓:匿名使用者

float a;

a = 2222.2f;

改成這樣就行了,錯誤原因是a是float型別,2222.2預設為double型別,強制型別轉換資料會有損失。加上f轉換為double後就可以給a賦值了。

c語言中float和double的區別,float六位有效數字是指什麼 30

C語言中關於改變資料型別以提取float中的整數和小數部分

分析如下 來 一種簡單的辦源 法是直接強制轉換到int型就是整數部分。減去這個int型就是小數部分了。如下 float n 12.223 int x int n float y n float x 得出的x為資料的整數部分,y為資料的小數部分。拓展資料 浮點型資料型別,float 資料型別用於儲存單...

C語言中不同資料型別在記憶體中所佔據的位元組大小是多少

型別 位元組 char 1short int 2int 2 tc 4 vc long 4float 4double 8long double 10 c語言中不同資料型別在記憶體中所佔據的位元組大小 型別 位元組 char 1short int 2int 2 tc 4 vc long 4float 4...

c語言中的基本資料型別包括無值型,無值型是什麼意思

c 中無值型指void.列舉型不是基本資料型別。基本資料型別包括 整形int 字元型 單字元型 char 寬字元型 wchar t實型 單精度型 float雙字元型 double邏輯型 bool 就我上面寫的,c 基本資料型別只有整形,字元型,實型,邏輯型。沒有無值型。整個資料型別關係如下 資料型別...