1樓:鈔雲霞折儂
還有想補充點.程式不夠簡潔.這樣很容易產生錯誤和混亂.
main()
2樓:貴華燦僧琛
我也寫了一個,結果也是那樣.
在計算中有一部分小數被丟棄了.
n-=n*(fz/fm)那句是元凶.
1/3結果會被保留成浮點數,捨棄一部分尾數,因為電腦中不存在分數.
#include
#include
intmain()
printf("%1.25f\n",n);
system("pause");
return0;}
3樓:屠鴻哲員藉
這是在算除法時出現小數精度不足的問題,但這個題目的答案應該是2008*1/2*2/3*3/4*...*2008/2009
因為你是說第2008次,那分子是2008才對。如果你算到1只是算到2007次。
最後結果應該是2008/2009≈0.99950223992035838725734196117471
而你程式中的printf("%1.25f",n);中的「%1.25f」不起作用,如果改成「%f」結果是0.999502,如果改成「%.2f」結果就是1.00
4樓:景秀越蔡德
這是電腦裡非整數數字全以小數點形式存放造成的,由於保留小數點位數有限使計算誤差。
用哪種資料型別都解決不了,除非你改變演算法,編寫一個分數的計算程式。
c語言浮點數誤差如何解決?如下
5樓:
浮點數的比較很麻煩,像while(sx>=0.1)這個等號很不保險要判斷一個浮點數是否等於另外一個浮點數,一般是求二者的差,差的絕對值小於某給定值就算相等 像這樣:
while((sx-0.1)<0.00001&&(0.1-sx)<0.00001)
總之,在程式中應該儘量避免浮點數的比較
c語言浮點數誤差 10
6樓:
這叫條件表示式。條件表示式中3個表示式型別允許不一樣,計算時要向精度最高的那型別轉換(語法規則),。(emum 是整型,低於float), 所以這裡是 float 型.
7樓:姒易臺信然
%e輸出的是浮點數的科學計數法表示。如9999.1
用%f形式輸出的話,就是9999.1,用%e形式輸出的話,就是9.9991*e3
。大概就是這樣了,不記得有%a這種輸出形式了。
用c語言編寫數學函式時 出現浮點數運算的較大誤差該怎麼解決?
8樓:
《c標準庫聖經》上面說,c語言開發數值演算法的難度大於其他所有庫函式之和。
這個c語言的程式為什麼總有一點誤差 5
9樓:聽不清啊
因為float型別最多只能有7位有效數字,多出的位數應該四捨五入。如果位數超出,應該使用double,相應輸入時的格式符請改為%lf
c語言計算11n的值,c語言計算112131415161n的值
0.676758 press any key to continue include int main printf lf n sum return 0 因為term的值bai改變了 不再是1 也可以du在迴圈裡賦zhi值1 include main else sum sum term printf...
關於c語言計算除法的問題,關於c語言計算除法的問題
n 2,因為左面的值為假,右面就不做了,所以n的值不發生變化,仍為2 c語言除法問題求教!運算子的優先順序問題,和 是同一執行級別,那麼如果沒有用括號說明,那麼就會從左到右執行,也就是先除以2,然後在乘以a。如果你先要除以 2 a這個整體,那麼就必須要用括號括起來。括號的運算優先順序高於 乘除。x1...
c語言程式設計計算13579n的值,C語言,程式設計計算1 3 5 7 9 n的值
include stdio.h main include int main 或者直接寫成sum n 1 n 2,不適用for的部分printf the result is ld sum return 0 小建議,希望可以幫到你 include stdio.h main 等差數列求和通項公式啊 inc...