Re: [問題] 基本程式設計概念的問題

看板Programming作者 (sjgau)時間18年前 (2008/01/21 11:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
底下,我用 Dev-C++ 實作,得到的結果和 您的構想不同。 當然啦!我不會否定 您的想法,我只是想說明一件事, 程式設計這種東西,一定要實際做過一遍,才能拿來說嘴。 否則,很容易得到不同的結果。 我很清楚怎麼 一回事情,這種東西討論起來, 沒完沒了。 /* a= 1.000000 請按任意鍵繼續 . . . a= 0.333333 請按任意鍵繼續 . . . a= 1.000000 請按任意鍵繼續 . . . Yes! a == 1.0 請按任意鍵繼續 . . . */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float a; a= 1.0; printf("a= %f\n", a); system("PAUSE"); a/= 3.0; printf("a= %f\n", a); system("PAUSE"); a*= 3.0; printf("a= %f\n", a); system("PAUSE"); if (a == 1.0) { printf("Yes! a == 1.0\n"); } else { printf("No! a <> 1.0\n"); } system("PAUSE"); return 0; }// end of main() ※ 引述《yzugsr (Bird)》之銘言: : ※ 引述《trickli (哲)》之銘言: : : (1) Rewrite the following pseudo-code if statement expression : : in a more realistic manner assuming that variables a and b are : : of type real: : : if (a = b) then : : .... : threshold = 0.00001 # 誤差容許值 : if (a > b - threshold) and (a < b + threshold) : : (2) Explain why this is necessary. : : 這題好像是關於兩個實數不太可能相等的問題,但不知道該怎麼作答。 : : 這是澳洲某大學 2006 年期末考題,請各位高手幫忙。 : : 謝謝。 : 因為浮點數有精確度的限制 : float a = 1; : a /= 3; : a *= 3; : if (a==1) print "Yes"; else print "No"; : 你應該會得到No的答案 : 因為執行完第二行時 a的數值應該是1/3 寫成十進位是0.3333333333.... : 電腦是用二進位記符點數的,而且有位數的限制 : 應該會變成0.0101010101.....循環 : 執行完第三行 a*=3 就變成0.999999999999999999998之類的東西 : 最後這個數就小於一了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.77.241.2
文章代碼(AID): #17b0z6g4 (Programming)
討論串 (同標題文章)
文章代碼(AID): #17b0z6g4 (Programming)