c語言中兩句相同的printf為什麼輸出結果不同

時間 2021-05-04 18:26:43

1樓:匿名使用者

float型別資料只有前6位是精確的,從第七位開始都是由「四捨五入」獲得的。

兩個printf()函式的輸出結果的差異發生在第十位,所以說,這兩組資料都是「對」的。

下面把float改為double(當然輸出格式也做了相應的修改),兩組輸出結果是相同的,原因在於,double型別資料的前16位是精確的。

/*a = 12345678900.000000 b = 12345678920.000000

a = 12345678900.000000 b = 12345678920.000000

press any key to continue

*/#include

int main(int argc, char* argv)

2樓:匿名使用者

double、float都是浮點型。double(雙精度型)比float(單精度型)存的資料更準確些,佔的空間也更大。double精度是float的兩倍,所以需要更精確的計算常使用double。

超出精度的部分就隨機了。。。。。

單精度浮點數在機內佔4個位元組,用32位二進位制描述。

雙精度浮點數在機內佔8個位元組,用64位二進位制描述。

浮點數在機內用指數型式表示,分解為:數符,尾數,指數符,指數四部分。

數符佔1位二進位制,表示數的正負。

指數符佔1位二進位制,表示指數的正負。

尾數表示浮點數有效數字,0.******x,但不存開頭的0和點指數存指數的有效數字。

指數佔多少位,尾數佔多少位,由計算機系統決定。

可能是數符加尾數佔24位,指數符加指數佔8位 -- float.

數符加尾數佔48位,指數符加指數佔16位 -- double.

知道了這四部分的佔位,按二進位制估計大小範圍,再換算為十進位制,就是你想知道的數值範圍。

對程式設計人員來說,double 和 float 的區別是double精度高,有效數字16位,float精度7位。但double消耗記憶體是float的兩倍,double的運算速度比float慢得多,c語言中數學函式名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度(以省記憶體,加快運算速度)。

3樓:匿名使用者

精度的問題

可以詳細去了解下 float和double 小數點前及小數點後在記憶體的存放方式及

float是32位的 double 是64位的上面的結果應該是超出了float的精度範圍

4樓:世界太黑暗

你試著用float型的函式定義a,b,這樣的話結果應該是正確的,或者把

printf("a=%f b=%f\n",a,b);

printf("a=%f b=%f\n",a,b);

改為printf("a=%f b=%lf\n",a,b);

printf("a=%f b=%lf\n",a,b);

c語言中宣告和printf輸出不一致,比如宣告的是int,輸出的是float,為什麼執行時候結果就是0.0000000

5樓:乃吧揪

c語言中宣告的變數型別和printf輸出型別沒有直接聯絡,可以相互轉換的。

比如說,定義 char a='a'; printf("%d",a);輸出的就是a的ascii碼值,printf("%c",a);輸出的就是字元a

6樓:匿名使用者

因為int型別儲存0的時候,對應記憶體塊是清零的,只有這樣才能表示0;

而浮點型別的話,根據標準,對應的記憶體塊不是或者不必是全清零的,只需要是乙個極小的趨近零的數就行了,按照int型別輸出這塊記憶體的內容,也就不是0了

c語言中或怎麼打就是那個兩豎,c語言中表示「或」的兩條豎線怎麼打出來啊

將鍵盤上的shift鍵和 鍵同時按下出現乙個豎線,再重複一次之前的操作再出現乙個豎線,即出現兩個豎線了。其在鍵盤上的位置如下所示,不同鍵盤位置可能不同 c c 裡的 兩豎,實際上 是兩個 一豎。所以 一豎打完,再打一豎,就是兩豎。一豎 鍵 大一點的鍵盤上 在 enter 回車鍵 上面,backspa...

c語言中保留兩位小數如何寫,c語言中怎麼保留小數2位

姬覓晴 2 接著我們儲存main.c檔案。3 這個時候我們把內容輸出,設定浮點型。也就是 f。4 但是輸出的時候預設有多位小數。5 於是我們可以設定 2f,也就是兩位數,因為我們寫了2。6 這個時候執行 的時候就會看到只有兩位小數了。 幸運的小李菲刀 輸出時?2f 即可指定輸出兩位小數 例題 356...

C語言如何使while迴圈兩次,C語言中如何實現while迴圈,執行設定的一段時間,比如5秒

潭清安董丁 anf c a 來接收使用者輸入的乙個字元時,會將回車符也接收下來。c語言在處理時,會將使用者輸入放在鍵盤緩衝區,使用scanf來接收 c時,編譯器從鍵盤緩衝區讀取乙個char字元,但是並不清空後面的字元,所以導致下一次scanf c a 時,將剩下的回車符先給讀進來,並進行處理了。要解...