600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java实现一定精度的开根号运算

java实现一定精度的开根号运算

时间:2019-07-30 14:06:43

相关推荐

java实现一定精度的开根号运算

需求:在不借助系统库的情况下,编写一个函数,实现开根号的操作,并且保证一定的精度

代码采用了牛顿迭代法以及二分查找法两种方式并分别打印了他们的循环次数以比较优劣:

/*** 实现一个函数,完成对v开根号的操作,误差小于t,不能调用函数库*/public class Sqrt{/*** 可以使用牛顿迭代法* 首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次后x的值就已经相当精确了*/public static double iter(int v,double t){int i = 0;// 首先预估一个数double random = v >> 1;while(abs((v-random*random)) > t){random = (random + v/random) >> 1;i++;}System.out.println("开根号值: "+random+" ,循环次数: "+i);return random;}// 二分查找法public static double binarySearch(int v,double t){int i = 0;double max = v;double min = 0;double temp = v >> 1;while (abs(temp*temp-v) > t){if (temp*temp > v ){max = temp;} else if(temp*temp < v){min = temp;}temp = (min+max) >> 1;i++;}System.out.println("开根号值: "+temp+" ,循环次数: "+i);return temp;}public static double abs(double a){return (a <= 0.0D) ? 0.0D - a : a ;}public static void main(String[] args) {iter(100,0.1);System.out.println("-----------------");binarySearch(100,0.1);}}

结果如下:

开根号值: 31.638589750191308 ,循环次数: 7-----------------开根号值: 31.63909912109375 ,循环次数: 16

牛顿迭代法相比较二分查找法效率更高

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。