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語言中有,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輸出為何都要加
n 是換行鍵,在 printf輸出函式中加入的話,利於顯示結果,否則連續輸出都連著,不好區分。 n 是換行的意思 以 開頭的是轉義字元 轉義字元主要用來表示那些用一般字元不便於表示的控制 n是換行輸出的意思,一般輸出的格式printf d n c 就是用十進位制形式輸出字元c,並且是換行輸出,你可以...
c語言中for語句是怎麼用的,C語言語言中FOR的用法
for語句通常具有如下形式 for statement1 statement2 statement3 這裡,statement1 statement2和statement3是一般的語句。其中statement2應具有布林型別,但在c中具有int型別 因為c語言不支援布林型別 這段語句的執行流程如下 ...