Java编程实现Math.sqart(开根号)方法

public static double squrt(double b){
double result=0;
if(b<1&&b>0){
double lower=b;
double upper=1;
int time=0;
while(true){

if((lower+upper)*(lower+upper)/4==b){
return (lower+upper)/2;
}else if((lower+upper)*(lower+upper)/4>b){
upper=(lower+upper)/2;
}else{
lower=(lower+upper)/2;
}
time++;
if(time>1000){
result=(lower+upper)/2;
break;
}
}
}else if(b>=1){
double lower=1;
double upper=b;
int time=0;
while(true){

if((lower+upper)*(lower+upper)/4==b){
return (lower+upper)/2;
}else if((lower+upper)*(lower+upper)/4>b){
upper=(lower+upper)/2;
}else{
lower=(lower+upper)/2;
}
time++;
if(time>1000){
result=(lower+upper)/2;
break;
}
}
}else if(b==0){
result=0;
}else{
System.out.println("NaN");
System.exit(0);
}
return result;

}

以上定义的方法是开根号的代码实现

public static void main(String[] args) {

                System.out.println(Math.sqart(11111));
System.out.println(Mathe.squrt(11111));
System.out.println("程序没结束");

}

在主方法里调用此方法基本与调用工具类Math.sqart方法相同

但是在在传入负数时

执行Math.sart方法时

public static void main(String[] args) {
System.out.println(Math.sqrt(-1));
System.out.println("程序没结束");

}

打印结果为:

NaN
程序没结束

而执行我写的方法Mathe.squrt

public static void main(String[] args) {
System.out.println(Mathe.squrt(-1));
System.out.println("程序没结束");

}

的结果为:

NaN

我的理解:

查看sqrt方法的源码是调用的本地方法,他传入负数的直接打印NaN,结束本地方法,继续执行JAVA程序

而本文所写的方法在传入负数时,直接调用System.exit(0),结束JAVA虚拟机,不会执行后面的代码

有些缺陷。

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值