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函式的問題關於雙精度
其實嚴格來說 兩個是一樣的 輸入的時候要用 lf 輸出的時候也要用 lf 的 f能輸出double 我也不懂 哈哈 你就按照 double 對應 lf 理解就可以了能輸出不影響 lf 不能輸入輸出double的時候再問也不遲 lf長浮點型,f浮點型 1f 小數點後1位 如果是 輸出printf 的輸...
C語言for迴圈,c語言中for語句是怎麼用的
為什麼?我想為你為什麼不知道原因,這是很簡單的邏輯推算題,一看就知道你的呼叫的函式返回值就是你的輸入值,我猜你是想要的結果是1,1 2,1 2 3,1 2 3 4,1 2 3 4 5是吧?呼叫函式的形參只是在你用的時候形成,當呼叫完畢就會釋放,j的運算結果不會保留在記憶體當中,因此你想要那種結果的話...
c語言中語句srandtimenull什麼意思
c語言中 srand time null 的意思是 使用當前時間進行隨機數發生器的初始化。time t time time t t 是c標準庫函式,如果t是空指標 null 直接返回當前時間。如果t不是空指標,返回當前時間的同時,將返回值賦予t指向的記憶體空間。time 是指返回自 unix 紀元起...