java - 获取 sqrt 的第 n 位数字 : getting digits that exceed the double scope

标签 java algorithm math

我有这段代码,它接受一个 digit 并返回 sqrt(2) 中该 digit 位置的数字值>:

public static int sqrtTwo(int digit)
{
    //1.41421356237…
   double result = Math.sqrt(2.0);

   String resultString = String.valueOf(result);

   if (digit == 0)  {
       return Integer.parseInt(resultString.substring(0, 1));
   }

   if (digit + 1 >= resultString.length())  {
       digit = resultString.length() - 2;
   }

   return Integer.parseInt(resultString.substring(digit + 1, digit + 2));
}

但是我只能通过使用它来获取这么多数字。 Math 类将返回一个受限制的 double 。我想计算一个 sqrt 值,直到某个数字,无论是第 100 位还是第 500 位。我该怎么做?

我找到了这段代码,但它看起来也受到 double 的限制:


    static double squareRoot(int number, int precision)
    {
        int start = 0, end = number;
        int mid;

        // variable to store the answer
        double ans = 0.0;

        // for computing integral part
        // of square root of number
        while (start <= end)
        {
            mid = (start + end) / 2;

            if (mid * mid == number)
            {
                ans = mid;
                break;
            }

            // incrementing start if integral
            // part lies on right side of the mid
            if (mid * mid < number) {
                start = mid + 1;
                ans = mid;
            }

            // decrementing end if integral part
            // lies on the left side of the mid
            else {
                end = mid - 1;
            }
        }

        // For computing the fractional part
        // of square root upto given precision
        double increment = 0.1;
        for (int i = 0; i < precision; i++) {
            while (ans * ans <= number) {
                ans += increment;
            }

            // loop terminates when ans * ans > number
            ans = ans - increment;
            increment = increment / 10;
        }
        return ans;
    }

最佳答案

大十进制构造函数中的“2”是您想要执行什么操作的值,MathContext 中的 1000 是您想要从中获取多少位数字。

这样我就可以将 sqrt(2) 精确到小数点后 1000 位

public static void main(String[] args) {
    BigDecimal digits = new BigDecimal("2");

    BigDecimal num = digits.sqrt(new MathContext(1000));
    System.out.println(num.toString());

}

关于java - 获取 sqrt 的第 n 位数字 : getting digits that exceed the double scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394846/

相关文章:

java - 嗨,我试图让我的 if 语句等于多个数字

Java Server Socket绑定(bind)多个域名/主机名

algorithm - 朴素贝叶斯分类器,解释模型拟合和预测算法

ruby - 我在哪里可以找到 Ruby 中的数学密集型应用程序

algorithm - 如何尽可能快地进行矩阵计算

javascript - 生成一个无重复数字的随机 4 位数字

java 文件仅插入文件中的最后数据

java - 无法使用 Java 在 Windows 中删除文件

algorithm - 使用数组而不是 Kruskals 算法的不相交集来加快合并和查找时间

arrays - 随机访问数组的时间复杂度