Re: [問題] 基本程式設計概念的問題
底下,我用 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
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章