int main ()
{double a,x
int n
scanf("%lf%d",&a,&n)
for(x=a/2n--)x=(x+a/x)/2
printf ("%lf",x)
return 0
}
平方直接两个数相乘即可。
平方根可以通过这个数本身和0之间进行折半查找的方法,对数据进行计算。
当两数相乘大于这个数时,重置最大值;小于这个数时,重置最小值。由于存在除不尽的数,可以加上一个精度进行判断。
#include<stdio.h>
#include<math.h>
double squareFun(double x) // 平方
{
return x*x
}
double sqrtFun(double x, int precision) // 开方
{
double a = 0, b = x, mid = x/2, val = pow(10, -precision)
if (x < 0)
return -1
while (true) // 循环折半查找
{
if (fabs(mid*mid-x) <= val) // 达到进度则退出
break
if (mid*mid > x)
b = mid // 重置最大值
else
a = mid // 重置最小值
mid = (a+b)/2
}
return mid
}
int main()
{
double d = sqrtFun(2, 15)
printf("%.15lf\n", d)
printf("%.15lf\n", squareFun(d))
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)