Java不使用Math.sqrt方法实现的求平方根
发布日期:2021-06-29 12:23:45 浏览次数:2 分类:技术文章

本文共 1490 字,大约阅读时间需要 4 分钟。

今天中午吃饭闲暇,和朋友聊到了如果不使用Math.sqrt方法,该怎么通过Java实现同样的功能,我们各自发表了下意见。

以下是我和朋友二人的解法思路:

1、朋友采用的是先确定当前数所处的最小整数区间,然后再通过二分法来进行判断检测。

2、我当时的想法是直接通过二分法进行判断检测,然后判断精度是否到达1e-7进行处理;

随后,回到宿舍后,想到了通过牛顿迭代法进行求值,而且速度上更快了一些。然后,索性就通过三种方式实现了该方法,

代码如下:

方法一(二分法):

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

public static double sqrt_ ( double t, Double precise) {		double x0 = t, x1, differ,				prec = precise != null ? precise : 1e-7;				while ( true ) {			x1 = ( x0 * x0 + t ) / ( 2 * x0 );			differ = x1 * x1 - t;						if ( differ <= prec && differ >= -prec ) {				return x1;			}			x0 = x1;		}	}
解法三(也是最准确的,针对朋友解法的优化):

public static float sqrtRoot(float m) {	   if ( m == 0 ) {		   return 0;	   }			   float i = 0;	   float x1, x2 = 0;	   while ( ( i * i ) <= m ) {	          i += 0.1;	   }	   x1 = i;	   for ( int j = 0; j < 10; j++) {	      x2 = m;	      x2 /= x1;	      x2 += x1;	      x2 /= 2;	      x1 = x2;	   }	   return x2;	}

该解法的测试代码:

public static void main(String[] args) {		for ( int i = 0; i <= 10; i++ ) {			System.out.println(i + " : " + sqrtRoot(i));		}	}

一下附上该解法的测试结果图:

以上便是Java不使用Math.sqrt方法实现的求平方根解法。

转载地址:https://buildupchao.blog.csdn.net/article/details/53762265 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:技术博客园系统开发设计总结
下一篇:Vue.js中Directive知识

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月30日 15时01分18秒