程序实现sqrt()函数

题意描述:写一个程序实现sqrt()函数

解题分析:平时用习惯了库orAPI,突然让写一个sqrt()函数,不免要思考一下。以下给出两种常见的解题思路

方法一二分法。以sqrt(3)为例,运算过程是这样的,任取一个初始值,比如这里取0,则有以下运算过程:

(0+3)/2=1.5		1.5*1.5<3
(1.5+3)/2=2.25		2.25*2.25>3
(1.5+2.25)/2=1.875	1.875*1.875>3
……

最后逐渐求得近似解,代码实现如下:

double getSqrt(double x){
	if(x < 0)
		return -1;
	if(x == 0)
		return 0;
	
	double low = 0;
	double high = x;
	double mid = (low + high) / 2;
	while(Math.abs(mid * mid - x) > 0.000001){
		if(mid * mid < x)
			low = mid;
		if(mid * mid > x)
			high = mid;
		mid = (low + high) / 2;
	}
	
	return mid;
}


方法二牛顿迭代法。仍以sqrt(3)为例,任取一个初始值,这里取8,则有以下运算过程:

(8+3/8)/2=4.185			4.185*4.185>3	
(4.185+3/4.185)/2=2.4519	2.4519*2.4519>3
(2.4519+3/2.4519)/2=1.837	1.875*1.875>3
(1.837+3/1.837)/2=1.725		1.752*1.752>3
……
逐渐求得近似解,代码如下:
double getSqrt(double x) {
	if(x < 0)
		return -1;
	if(x == 0)
		return 0;

	double res = 8;
	while(Math.abs(res * res - x) > 0.000001){
		res = (res + x/res)/2;
	}

	return res;
}


实验结果:




  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值