请帮我解释一下~~~谢谢

yanbinma 2005-08-22 09:25:32
应用递归算法求某数a的平方根.公式:x1=1/2(x0+a/x0)
帮我解释一下if( fabs(x1-x0)>=0.00001)什么意思
#include<stdio.h>
#include<math.h>
double fun(double a,double x0)
{ double x1,y;
x1=(x0+a/x0)/2.0;
if(fabs(x1-x0)>=0.00001)
y=fun(a,x1);
else y=x1;
return y;
}
main()
{ double x;
printf("Enter x:");scanf("%lf",&x);
printf("The square root of %lf is %lf\n",x,fun(x,1.0));
}
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiganlan0824 2005-08-23
  • 打赏
  • 举报
回复
if( fabs(x1-x0)>=0.00001)
1 fabs(),求浮点数的绝对值;
2 使用这条语句主要是由于计算机中数据结构的位数有限,因此不可能完全出现等于零的情况,用这条语句的主要作用是取精度.
yuchengliu 2005-08-22
  • 打赏
  • 举报
回复
那个是取精度的。。
lvzhangcheng 2005-08-22
  • 打赏
  • 举报
回复
菜鸟看法:
>=意思是精度不够,需要继续
后面的0.000001是精度,你要是比它小的话,说明的得到的答案已经合格了,自然就不需要继续了,
if的条件自然要为"否"


偶说的不对的话,下面的指教
xiaocai0001 2005-08-22
  • 打赏
  • 举报
回复
那为什么不可以>或<或<=呢

-----------------------------
这就和你的算法思想有关了,fabs(x1-x0)>=0.00001也是控制计算精度的,如果大于0.00001表示迭代所求得的结果不符合预定的精度要求。

由于计算机进行迭代计算,是慢慢逼近的,不是精确的值,所以有个精度控制。
yanbinma 2005-08-22
  • 打赏
  • 举报
回复
那为什么不可以>或<或<=呢
xiaocai0001 2005-08-22
  • 打赏
  • 举报
回复
fabs(x1-x0)>=0.00001
-------------------------
由于计算机在进行非整数运算,存在数据存储精度及运算精度的问题。
也就是说,某个表达式在数字运算上是精确的等于0的,但由于计算机在运算时存在舍入误差,最后的运算结果不会是精确的等于0,特别是对double数据类型,它的精度较高,不会严格相等。
你若写成x1==x0一般计算机会返回不等,所以需要人为控制精度,认为二者之间的差值在某个范围内的时候,即可接收该两个数相等。
foochow 2005-08-22
  • 打赏
  • 举报
回复
fabs



原型:extern float fabs(float x);

用法:#include <math.h>

功能:求浮点数x的绝对值

说明:计算|x|, 当x不为负时返回x,否则返回-x



69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧