java实现求平方根

朋友说面试遇到这个问题,我上网上查了一下,基本就是两种方法

1.二分法不断尝试

网上找的代码没有考虑小于1大于0的情况,随便加上了,没有优化。

public static double sqrt(double t, Double precise) {  
	    double low = 0, high = t, middle, squre,  
	            prec = precise != null ? precise : 1e-5;  
	    if ( t < 0 ) {  
	        throw new RuntimeException("Negetive number cannot have a sqrt root.");  
	    }else if(t>=1){
	    	while ( high - low > prec ) {  
		        middle = ( low + high ) / 2;  
		        squre = middle * middle;  
		          
		        if ( squre > t ) {  
		            high = middle;  
		        } else {  
		            low = middle;  
		        }  
		    } 
	    	return ( low + high ) / 2;  
	    }else{
	    	low = t;
	    	high = 1;
	    	while ( high - low > prec ) {  
		        middle = ( high+low ) / 2;  
		        squre = middle * middle;  
		        if ( squre > t ) {  
		            high = middle;  
		        } else {  
		            low = middle;  
		        }  
		    } 
	    	return ( high + low ) / 2 + squre;  
	    }
	}
2.牛顿迭代法

这个确实比别的方法效率高并且准确,一般5次循环就能很精确了,不过还是有一些数很极端的,所以还是用一个精度来判断。

public static double sqrt ( double t, Double precise) {
		double x = t, differ,prec = precise != null ? precise : 1e-5;
		while ( differ > prec || differ < -prec ) {
			x = ( x * x + t ) / ( 2 * x );
			differ = x * x - t;
		}		
	        return x;
	}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值