这个求导数的程序出现了逻辑错误?
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/30 21:30:23
这个求导数的程序出现了逻辑错误?
这个程序求函数x^2+x的导数.输入1,2,3等较小的数时,结果正确.奇怪的是,输入4以上的数时,全输出0.我苦思冥想,找不出哪儿错了,
double f(double x)
{
\x05return(x*x+x);
}
#include
#include
void main()
{
\x05double x,dx=1,f1,temp;
\x05scanf("%lf",&x);
\x05temp=(f(x+dx)-f(x))/dx;
\x05dx*=0.1;
\x05f1=(f(x+dx)-f(x))/dx;
\x05while(fabs(f1-temp)>0.00000000001)
\x05{
\x05\x05temp=f1;
\x05\x05dx*=0.1;
\x05\x05f1=(f(x+dx)-f(x))/dx;\x05
\x05}
\x05printf("%.16lf\n",f1);
}
这个程序求函数x^2+x的导数.输入1,2,3等较小的数时,结果正确.奇怪的是,输入4以上的数时,全输出0.我苦思冥想,找不出哪儿错了,
double f(double x)
{
\x05return(x*x+x);
}
#include
#include
void main()
{
\x05double x,dx=1,f1,temp;
\x05scanf("%lf",&x);
\x05temp=(f(x+dx)-f(x))/dx;
\x05dx*=0.1;
\x05f1=(f(x+dx)-f(x))/dx;
\x05while(fabs(f1-temp)>0.00000000001)
\x05{
\x05\x05temp=f1;
\x05\x05dx*=0.1;
\x05\x05f1=(f(x+dx)-f(x))/dx;\x05
\x05}
\x05printf("%.16lf\n",f1);
}
![这个求导数的程序出现了逻辑错误?](/uploads/image/z/6284351-47-1.jpg?t=%E8%BF%99%E4%B8%AA%E6%B1%82%E5%AF%BC%E6%95%B0%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%87%BA%E7%8E%B0%E4%BA%86%E9%80%BB%E8%BE%91%E9%94%99%E8%AF%AF%3F)
1.错误原因是这样的:
当输入大于4的时候,由于dx减小的太快,使得fabs(f1-temp)的值反而增大,越来越离谱,最后dx减为0,分母为除数,出错,退出循环.显示异常.
2.解决方案:
可适当增大dx每次相乘的系数,如:dx*=0.5; ----经我验证没有问题.
当输入大于4的时候,由于dx减小的太快,使得fabs(f1-temp)的值反而增大,越来越离谱,最后dx减为0,分母为除数,出错,退出循环.显示异常.
2.解决方案:
可适当增大dx每次相乘的系数,如:dx*=0.5; ----经我验证没有问题.
这个求导数的程序出现了逻辑错误?
运行程序出现了错误
请求对这个程序出现的错误解答,
C#程序中,可使用try.catch机制来处理程序出现的()错误 A.语法 B.运行 C.逻辑 D.拼写
为什么这个vf程序会出现嵌套错误?
英语翻译这是编程时碰到的输入错误提示,我只会按字面理解,可是没用,出现这个意味着程序那里出错了,#include int
matlab里求导数,结果中出现的这个D(n)是什么意思?
matlab程序出现了错误,不知道哪里出错了
这个回答是犯了哪种逻辑错误?:
谁能解释一下这个程序的具体逻辑,有急用,
lingo 小程序,出现错误,
英语翻译程序未响应错误 ---这个是标题发现这个问题是昨天晚上开始的,微软支持库都重新安装过.可是还是会出现未响应错误.