Java实现开根号运算(不使用数组和String) 您所在的位置:网站首页 开根号的简单算法 Java实现开根号运算(不使用数组和String)

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

2023-04-01 00:37| 来源: 网络整理| 查看: 265

使用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 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确定整数部分的时候可以优化,并不需要把所有小于平方根的数都过滤一遍。读者可以尝试一下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有