这个求导数的程序出现了逻辑错误?

[复制链接]
查看11 | 回复1 | 2011-7-7 07:39:06 | 显示全部楼层 |阅读模式
这个程序求函数x^2x的导数。输入1,2,3等较小的数时,结果正确。奇怪的是,输入4以上的数时,全输出0.我苦思冥想,找不出哪儿错了,求高手解答。
doublef(doublex)
{
        return(x*xx);
}

#includestdio.h
#includemath.h
voidmain()
{
        doublex,dx=1,f1,temp;
        scanf(\"%lf\",
        temp=(f(xdx)-f(x))/dx;
        dx*=0.1;
        f1=(f(xdx)-f(x))/dx;
        while(fabs(f1-temp)0.00000000001)
        {
                temp=f1;
                dx*=0.1;
                f1=(f(xdx)-f(x))/dx;       
        }
        printf(\"%.16lf\\n\",f1);
}
回复

使用道具 举报

千问 | 2011-7-7 07:39:06 | 显示全部楼层
1.错误原因是这样的:
当输入大于4的时候,由于dx减小的太快,使得fabs(f1-temp)的值反而增大,越来越离谱,最后dx减为0,分母为除数,出错,退出循环。显示异常。
2.解决方案:
可适当增大dx每次相乘的系数,如:dx*=0.5;----经我验证没有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行