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

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

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;

scanf("%lf %lf %lf", &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語言中的printf語句printf蘋果的價格為

想念你的那個誰 12f表示輸出時的資料佔12個字元寬度,由於沒有指定小數點位數所以預設顯示6位小數,即若是 f則顯示123.456000,這個顯示一共10位 包含小數點 與 12f要求的12位寬度還差2個字元寬度,就在前面新增兩個空格 如果是 012f,則會顯示00123.456000,即那兩個空格...

c語言中有,C語言中有printf 3 0f f6 1f n , fahr,celsius 其中 是什麼意思?

printf 3.0f f6.1f n fahr,celsius 3.0f 的意思是用3位浮點型數來輸出變數fahr的值 小數位為零 f6.1f n 的意思是用6位小數點為1位的浮點型數來輸出變數celsius的值.其中的小數點前後的兩位數分別表示要輸出變數的總位數和它的小數位數。 格式說明的字首 ...

c語言中printf輸出float和double都用f麼scanf又

答 1.c語言中printf輸出float和double都可以用 f,而double型資料還可以用 lf。2.scanf當中若是對雙精度的變數賦值是必須是 後跟lf,而printf當中可以用 f也可以用 lf沒有限制。拓展資料 c語言中的格式控制符 d十進位制有符號整數 u十進位制無符號整數 f浮點...