牛顿迭代法计算正实数的平方根,写出该程序测试用例
double sq_root(double a){
double x;
if(a<0)
printf("请输入正实数!");
x=a;
while( fabs (x*x-a) >= E0 ) // (x+a/x)*0.5是牛顿迭代系数,E0是定义的一个常数误差
x = ( x+a/x)*0.5;
return x;
}
牛顿迭代算法可以不用管怎么来的,只用针对这个程序,设计下测试用例,大家来讨论下吧sdlkfj2 程序中的返回值x的值就是输入正实数a的平方根. 输入必须为正实数,那么可以确定一个有效等价类(正实数或0)和一个无效等价类(负实数),不会只有这个用例吧?还可以找出哪些测试用例来呢? while循环的判定条件是不是也应该覆盖? 有没有答案那。 fabs()是个什么函数呀 是不是还要看看EO这个常数得多少呀 1. a是否是double型的数字?分成两个等价类(数字+非数字);
2. a=0?分成三个等价类(大于0,等于0,小于0)。当等于0时,a/x成了0/0,不知道会有一个什么结果,程序在此处没有容错。
3.E0足够大?两个等价类,一个是使得fabs(x*x-a)<E0,即不进入循环,解就是x=a;另一个是进入循环。
4.应该还有考察计算是不是收敛的用例
页:
[1]