c語言中printf語句以小數形式輸出單 雙精度實數的問題

時間 2021-08-11 17:04:07

1樓:匿名使用者

這個問題其實屬於計算機組成原理的範疇了,你需要先認識到浮點數是如何儲存的。目前已知的所有的c/c++編譯器都是按照ieee(國際電子電器工程師協會)制定的ieee 浮點數表示法來進行運算的。這種結構是一種科學表示法,用符號(正或負)、指數和尾數來表示,底數被確定為2,也就是說是把一個浮點數表示為尾數乘以2的指數次方再加上符號。

float

共計32位,摺合4位元組

由最高到最低位分別是第31、30、29、……、0位31位是符號位,1表示該數為負,0反之。

30-23位,一共8位是指數位。

22-0位,一共23位是尾數位。

每8位分為一組,分成4組,分別是a組、b組、c組、d組。

每一組是一個位元組,在記憶體中逆序儲存,即:dcba按照ieee浮點數表示法,將float型浮點數轉換為十六進位制**。對於這種帶小數的就需要把整數部和小數部分開處理,其原理比較複雜幾句話也說不清楚,但是精度差距就從這裡產生了,所以出現這種誤差實際是儲存精度的問題。

建議你可以用double等型別提高精度。

如果你真的要詳細瞭解的話可以查閱計算機組成原理中浮點數表示法部分就能很好理解了

2樓:踏樰無痕

精度問題,超過了float的範圍。建議都使用double,因為float通常精度不夠,8位數字以上就很容易出現這種問題,而且double和float的計算代價相差無幾,而且在某些機器上,double甚至比float還快。

3樓:匿名使用者

printf的問題,沒有認真研究過,printf("%.4f\n",x);用這個代替它吧。

c語言中 如何輸入三個實數,輸出其中絕對值最小的數

4樓:奇妙百貨鋪

#include

#include

double a, b, c;

if(abs(a) > abs(b) )

else

}else

else}

5樓:匿名使用者

// 如何輸入三個實數,輸出其中絕對值最小的數#include

#include

main()

6樓:匿名使用者

#include

#include

void main()

else}

7樓:匿名使用者

#include "stdio.h"

float xiaping(float a)

main()

關於C語言中scanf和printf函式

輸入結果要看你 定義的變數 year 和 code 的 型別,決定,1,int year char code scanf d c year,code printf d c year,code 列印結果 1998和逗號 c 只能接受耽擱字元你輸入的是1998,r 所以 code 裡面鋤從了逗號 而沒有...

c語言中語句和指令有什麼區別,C語言中“語句”和“指令”有什麼區別?

a羅網天下 區別一 構成不一樣 1 c程式的執行部分是由語句組成的。程式的功能也是由執行語句實現的。2 指令可以使編譯器按不同的條件編譯不同的程式部分,因而產生不同的目標 檔案。這對於程式的移植和除錯是很有用的,尤其是針對於跨平臺程式移植的時候。區別二 實現功能不一樣 1 c程式語言可以實現多種程式...

c語言中怎麼保留小數2位,C語言中如何保留一位小數點

浦雁真棋 這是由printf 這個函式的輸出格式決定的,後面的表示格式,f表示以小數形式輸出單 雙精度數,在沒有規定位數時預設為輸出6為小數,若規定了位數,則例如 m.nf則表示輸出一共為m位,其中小數佔n位,而你這個 並沒有規定小數點後有多少位,故輸出6位 卻竹青迮鵑 把printf 2f n d...