看板 EE_DSnP 關於我們 聯絡資訊
我擷取一段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)