Получить nth di git sqrt: получение цифр, превышающих двойную область видимости - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть этот код, который принимает digit и возвращает значение di git, которое находится в этой позиции digit в sqrt(2):

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 с точностью до некоторого ди git, будь то 100-й или 500-й ди git, неважно. Как мне это сделать?

Я нашел этот код, но он также выглядит ограниченным 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;
    }

1 Ответ

1 голос
/ 24 апреля 2020

«2» в большом десятичном конструкторе - это значение операции, которую вы хотите выполнить, 1000 в MathContext - это количество цифр, которое вы хотите получить из него.

, вот так вот как Я получил бы получить 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());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...