Re: [問題] 基本程式設計概念的問題
※ 引述《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: 59.124.99.126
推
01/21 11:31, , 1F
01/21 11:31, 1F
推
01/21 11:36, , 2F
01/21 11:36, 2F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章