java 开根号_Java实现开根号运算(不使用数组和String)

使用Java自己实现开根号运算,网上也有不少代码,多数都使用String或者数组。这里写一段只使用double基础数据类型实现的方法。

private static double sqrt(int n, int p) {

double lower = 0;

while (lower * lower < n) {

lower++;

}

--lower;

int flag = 1;

int d = 10;

while (flag <= p + 1) {

d = 10;

for (int x = 1; x < flag; x++) {

d = d * 10;

}

double step = 1.d / d;

for (int i = 0; i < 10; i++) {

if (lower * lower > n) {

break;

}

lower = lower + step;

}

lower = lower - step;

flag++;

}

double v1 = lower * (d * 10);

int v = ((int) v1 % 100) / 10;

double res;

if (v < 5) {

res = (lower * d - v) / d;

} else {

res = (lower * d - v + 10) / d;

}

return res;

}

参数中n是整数,p是精度。这种程序一般不能支持特别高的精度(比如几十位),五六位就不错了。

代码原理简单,这里就不说了。先看一下输出:

public static void main(String[] args) {

System.out.println("2 1 = " + sqrt(2, 1));

System.out.println("2 2 = " + sqrt(2, 2));

System.out.println("2 3 = " + sqrt(2, 3));

System.out.println("2 4 = " + sqrt(2, 4));

System.out.println("3 2 = " + sqrt(3, 2));

System.out.println("3 3 = " + sqrt(3, 3));

System.out.println("25 4 = " + sqrt(25, 4));

System.out.println("25 6 = " + sqrt(25, 6));

}

输出

2 1 = 1.4000000000000004

2 2 = 1.41

2 3 = 1.414

2 4 = 1.4142

3 2 = 1.7300000000000004

3 3 = 1.7320000000000004

25 4 = 5.0000099999999925

25 6 = 5.000000099999996

由于double精度的问题,输出并不完全满足要求,当需要几位精度的时候要截取前几位。

另外,当输入的整数比较大的时候,精度丢失也比较快:

2500 5 = 50.00000000000001

2500 6 = 49.999999500000015

25 6 = 5.000000099999996

25 7 = 4.999999949999996

可以看到给25开根号6位精度还行,给2500开的话,6位精度已经不能保证了。

上面的代码在while确定整数部分的时候可以优化,并不需要把所有小于平方根的数都过滤一遍。读者可以尝试一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值