作者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)