作者reefuj (重要的是心 心阿)
看板EE_DSnP
標題Re: 關於4-1的問題
時間Fri Nov 9 23:05:27 2007
我擷取一段code來討論一下大家常忽視的東西
double pi1 , pi2;
double error=fabs(pi2-pi1);
這是在宣告的部份
初始值沒有給定
另外第二行給了有些同學錯覺
他們會認為有了這行 error就永遠是 = fabs( pi2 - pi1 );
其實只有當下啦, 之後當pi2或者pi1的值改變之後
error的值不會自動更新....
for(n=1;accuracy<error;n++)
{
pi1=4*pow(-1.0,int(n))*(1/(2*n+1))+4; <-- update pi1
pi2=4*pow(-1.0,int(n+1))*(1/(2*n+3))+4; <-- update pi2
}
這一段code的問題在於 accuracy < error
是這個for loop的{} 內容是否繼續執行的條件
但是仔細想想 如果一但進入for裡面
依照{}的內容更新了 pi1, pi2的值
那樣子執行完之後再一次檢查 accuracy < error 時
是否和執行前相同? 這意味這一旦進入這個for loop將會形成無窮迴圈...
所以依照題意應該改變error的值...而且應該在這個for loop裡面改變它
對了 這個pi1, pi2 湊不出題目要的無窮級數喔... 剛剛忘記加這句
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.42.185
※ 編輯: reefuj 來自: 140.112.42.185 (11/09 23:12)