gigi-1128 发表于 2007-1-10 11:50:46

牛顿迭代法计算正实数的平方根,写出该程序测试用例

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

gigi-1128 发表于 2007-1-11 10:56:36

程序中的返回值x的值就是输入正实数a的平方根.

gigi-1128 发表于 2007-1-11 11:10:09

输入必须为正实数,那么可以确定一个有效等价类(正实数或0)和一个无效等价类(负实数),不会只有这个用例吧?还可以找出哪些测试用例来呢?

chenxi01032005 发表于 2007-1-11 15:33:51

while循环的判定条件是不是也应该覆盖?

getfly 发表于 2007-1-11 22:35:23

有没有答案那。

boliping 发表于 2007-1-15 15:04:31

fabs()是个什么函数呀

boliping 发表于 2007-1-15 15:09:19

是不是还要看看EO这个常数得多少呀

hayerk 发表于 2007-1-18 10:10:26

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]
查看完整版本: 牛顿迭代法计算正实数的平方根,写出该程序测试用例