Java计算平方根算法
2016-12-23 15:24
330 查看
public class SqrtTest{ public static double mySqrt(double num, double offSet){ if(num <= 0) return 0; double flag = 10.0; int counter = 0; do{ if (Math.abs(flag*flag - num) < offSet) { System.out.println(flag); return flag; }else{ System.out.println(flag); counter++; flag = (flag + num/flag)/2; } }while(counter<100); return -1; } public static void main(String[] args){ System.out.println(mySqrt(12545, 0.2)); } }
上述方法是g=(g+x/g)的方法。若不知道该方法,亦可用二分法来逼近。是偶数次开方时,初始下界为0,上初始界为x;奇数次开方时,初始下界为-|x|,上初始界为|x|。后续二分查找直至逼近或者到达搜索次数退出。
public class MySqrt{
public static double doMySqrt(double num, double offSet, int sqrtNum){
double low = 0, high = 0;
if(sqrtNum <= 0){
return 0;
}else if(sqrtNum % 2 == 0){
high = num;
}else{
low = -Math.abs(num);
high = Math.abs(num);
}
int counter = 0;
double flag = (low + high)/2;
do{
if (Math.abs(Math.pow(flag, sqrtNum)-num)<offSet) return flag;
if(Math.pow(flag, sqrtNum)>num){
high = flag;
}else{
low = flag;
}
flag = (low + high)/2;
counter ++;
}while(counter < 100);
return 0;
}
public static void main(String[] args){
System.out.println(doMySqrt(-45, 0.1, 3));
}
}
相关文章推荐
- Java --- 线程同步和异步的区别
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
- JAVA数组学习之一:对一维数组进行逆序排列
- java.lang.IllegalArgumentException
- java substring
- 1000行代码读懂Spring(一)- 实现一个基本的IoC容器
- springMVC接受list报错:Could not instantiate bean class [java.util.List]: Specified class is an interf
- Quartz中Cron表达式解释
- 标准的Java编码规范手册
- java开发系统内核:进程切换
- 标准的Java编码规范手册
- java中equals()函数和"=="的区别
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- java jar 打包命令
- java加载spring配置文件
- 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等
- java去警告(@SuppressWarnings)
- Java 多线程 生产者和消费者 队列
- spring4 + log4j2+ slf4j的配置
- javaWeb学习(3)——WebServlet格式总结